Autor Zpráva
maks
Profil
Ahoj,
mám několik elementů, které mají ID ve tvaru neco_id. Já teď pomocí document.getElementById('neco_10') pracuji s daným elementem, který má id = 10.

A má otázka zní, pokud bych chtěl pracovat, třeba označit nebo cokoliv jiného, více elementů, jak na to? Dejme tomu, že bych potřeboval vybrat všechny s ID mezi 10 a 20, tedy 10, 11, 12, 13 ... 19. Bude/Mělo by to fungovat tak, že kliknu na nějaký element a jiným se změní barva.

Hledám tedy něco, jako je v PHP LIKE (LIKE 'neco_1%') nebo v tomto smyslu.


tlačítka:
0 - 9   - po kliknut obarví elementy s ID >0 a <10 
10 - 19 - po kliknut obarví elementy s ID >9 a <20 (onclick="document.getElementById(LIKE 'neco_1%')")
20 - 29 - po kliknut obarví elementy s ID >19 a <30 (onclick="document.getElementById(LIKE 'neco_2%')")
...
<span id="neco_1">text</span>
<span id="neco_2">text</span>
<span id="neco_3">text</span>
...
<span id="neco_30">text</span>


Pořádně nevím, jak to vysvětlit, snad je to pochopitelné.


Děkuji.
DJ Miky
Profil
Co cyklus?
function oznac(od,do) {
  for(var i=od; i<=do; i++) {
    document.getElementById('neco_'+i).style.backgroundColor='#F00';
  }
}

A pak jen
<input type="button" onclick="oznac(10,19)" value="10 - 19">
pro označení textů 10 až 19.
ah01
Profil
maks
Nic jiného než cyklus ti patrně nezbude. Doporučuji ale nejprve zkontrolovat, jestli daný element vůbec existuje, jinak se můžeš dostat do velkých problémů.

Být tebou, tak si nejprve vytvořím fci, která mi zajistí průchod všemi elementy.
function eachElementLike(prefix, from, to, callback)
{
  for(var i = from; i <= to; i++)
  {
    var el = document.getElementById(prefix + i);
    if(el != null)
    {
      callback.call(el, i);
    }
  }
}


Fce. označ by pak vypadala takto:
function oznac(from, to)
{
  eachElementLike('neco_', from, to, function(n){
    // this ... aktuální element
    // n    ... číslo elementu (to se může někdy hodit)
    this.style.backgroundColor = "red";
  });
}
_es
Profil
ah01
Nic jiného než cyklus ti patrně nezbude.
Možno by sa ešte dala meniť v CSS trieda nejakého nadradeného objektu tak, aby sa správne zmenilo zobrazenie tých 30 prvkov čo obsahuje.
Neviem, či by to tak mohlo fungovať, len ma to tak napadlo. Ak by to tak šlo, tak by miesto cyklu stačil jeden príkaz.
maks
Profil
_es
Možno by sa ešte dala meniť v CSS trieda nejakého nadradeného objektu tak
nešla, ve skutečnosti je to tabulka a bude se měnit barva řádků, ale nechtělo se mi vypisovat dlouhý kód tabulky, span je jednodušší. A potřebuji jen některé, takhle by se obarvily všechny

ah01
to vypadá zajímavě, zkusím se na to večer kouknou. I kdyby to nebylo ono, tak děkuji aspoň za inspiraci :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: