2016-09-05 3 views
0

javascriptでは、次の兄弟とは対照的にdomの次のノードをどうやって取得しますか?彼らはこれを持っています。次の兄弟ではなく、ドキュメント内の次のノードをどのように取得しますか?

は、例えば次のようなHTMLを取る:

<div> 
    <p> 
    <p id="current"> 
</div> 
<div id="next"> 
    <p> 
</div> 

私はノード上でそれを実行すると、「現在の」それは「次」のノードを返すという機能が欲しいです。私はIDを分かりやすくするために使用しています。

+1

は、最初の子は、「次のノード」でしょうか? – Oriol

+0

HTMLは要素のツリーとして扱われます。特定の子ノードセットを使い果たしてしまえば、「次のノード」はありません。 (私はこれが本当にあなたが尋ねようとしているものではないことを知っています) – Ouroborus

答えて

1

nodeが開始ノードであると仮定すると、これはうまくいくと言います。

while(!node.nextSibling && node.parentNode) node = node.parentNode; 
node = node.nextSibling; // will be null if node was last in document 

これは文書内の次のノードを取得しますが、この状況で子を「後続」としてカウントするかどうかはわかりませんがもしそうなら、あなたが開始する必要があります:

jQueryので
if(node.firstChild) node = node.nextChild; 
else { 
    while ... 
} 
0

次の作業になります。それは子供を持っていた場合

function findNextNode(ElementToSearch) { 
    if (ElementToSearch.next().length == 0) { 
    return ElementToSearch.parent().next(); 
    } else { 
    return ElementToSearch.next(); 
    } 
} 

var nextNode = findNextNode($('#current')); 
+0

* "次の仕事になるでしょう" * - あなたに教えてください... – nnnnnn

0
function next(current) 
{ 
    var parent = current.parentNode, 
     children = parent.children, 
     //childNodes、nextSibling maybe contain ObjectText 
     length = children.length; 
    for(var i=0;i<length;i++) 
    { 
     if(current == children[i]) 
      break; 
    } 
    //if not lastChild 
    if(i<length-1) 
    { 
     return children[i+1]; 
    } 
    else 
    { 
     //recursion search until parent == document.body 
     if(parent != document.body) 
     { 
      return next(parent); 
     } 
     else 
     { 
      window.console.warn("Can not get next sibling"); 
     } 
    } 

} 
関連する問題