Diskuze: poradie child elementu

JavaScript JavaScript poradie child elementu

Avatar
saeQ
Člen
Avatar
saeQ:
<div id='container'>
    <div id='one'>some</div>
    <div id='two'>random</div>
    <div id='three'>text</div>
</div>

Ahoj, da sa nejako zistit kolkaty child element je jednotlivy div?(napr. div one = children[0]

 
Odpovědět 29.10.2014 12:23
Avatar
Fredep
Redaktor
Avatar
Nahoru Odpovědět 29.10.2014 12:36
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
saeQ
Člen
Avatar
saeQ:

V cistom js to nejde?

 
Nahoru Odpovědět 29.10.2014 12:43
Avatar
Fredep
Redaktor
Avatar
Odpovídá na saeQ
Fredep:

Jde to, ale je to o něco složitější ;) Odkážu tě na stackoverflow...
http://stackoverflow.com/…n-javascript

EDIT: nebo zde máš přímo hotovou funkci, která by měla fungovat... Je od dystroy.

function indexInParent(node) {
    var children = node.parentNode.childNodes;
    var num = 0;
    for (var i=0; i<children.length; i++) {
         if (children[i]==node) return num;
         if (children[i].nodeType==1) num++;
    }
    return -1;
}
Editováno 29.10.2014 12:46
Nahoru Odpovědět 29.10.2014 12:45
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Michal Žůrek (misaz):

jde to velmi jednoduše (v čistém JS).

var nejakyDiv = ...
var jehoIndex = Array.prototype.indexOf.call(nejakyDiv.parentElement.children, nejakyDiv);

btw. je to v místním (novém) tutoriálu http://www.itnetwork.cz/…ek-dokonceni

Editováno 29.10.2014 12:55
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 29.10.2014 12:54
Nesnáším {}, proto se jim vyhýbám.
Avatar
saeQ
Člen
Avatar
saeQ:

Dik :) , btw

Array.prototype.indexOf.call(nejakyDiv.parentElement.children, nejakyDiv);

preco sa tu vola call()? nepouziva sa call/apply na volanie argumentov funkcie do urciteho scope?

Editováno 29.10.2014 13:19
 
Nahoru Odpovědět 29.10.2014 13:18
Avatar
Odpovídá na saeQ
Michal Žůrek (misaz):

call volám na fonkci aby se změnil její kontext. Samotné nejakyDiv.paren­tElement.chil­dren není pole a nemá metodu indexOf, ale má to stejné vlastnosti jako pole (indexované prvky a vlastnost length) tak vlastně to té metodě podstrčím. Je to popsané v tom tutoriálu.

Nahoru Odpovědět 29.10.2014 13:27
Nesnáším {}, proto se jim vyhýbám.
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:
function indexInParent(el){
  var index = -1;
  while(el){
    if(el.nodeType !== 3){ index++; }
    el = el.previousSibling;
  }

  return index;
};

Funguje ve všem.

'Array.prototy­pe.indexOf' má hodnotu null nebo není objekt.

Editováno 29.10.2014 14:40
 
Nahoru Odpovědět 29.10.2014 14:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.