たとえば、1つのULには10リスがあり、3番目のLIには特別なスタイルがあります(色は赤、他は黒です)。赤から赤への他のすべてのlisの色を設定したいです。この時点で、赤いLIのすべての兄弟ノードを取得する必要があります。
兄弟はあなたと同じであり、前でも次もそうではなく、あなたよりも年上の人がいるかもしれません。同様に、ブラザーノードが使用されます。兄弟ノードを取得するための定期的な方法は次のとおりです。
コードは次のとおりです
function siblings(elm){var a = []; var p = elm.parentnode.children; for(var i = 0、pl = p.length; i <pl; i ++){if(p [i]!== elm)a.push(p [i]);} return a;}アイデア:まず、この要素の親ノードのすべての子供を取得します。すべての子供にもこの要素自体が含まれているため、結果から自分自身を取り除く必要があります。
奇妙に見える別の方法があります。これは、jQueryの兄弟ノードのソースコードを取得することです。
コードは次のとおりです
function sibling(elem){var r = []; var n = elem.parentnode.firstchild;アイデア:最初にこの要素の親ノードの最初の子ノードを見つけ、次にループして、検索が完了するまでこのノードの次の兄弟ノードを見つけます。
なぜJQueryがこの方法を使用しているのか疑問に思っています。この方法は最初の方法よりも効率的ですか?
私の予備テスト - 1,500以上のLIの後、上記の2つの方法は効率にほとんど違いがなく、どちらも数ミリ秒以内に成功しています。テスト環境はChromeとFirefoxです。
すべての兄弟ノードを取得する必要がある場合は、上記の方法のいずれかを使用できます。
もちろん、将来上記の2つの方法を検証します。違いがある場合は、それらを更新します。
jQueryの親、息子、兄弟ノード検索方法
jquery.Parent(expr)親ノードを見つけます。$( "span")。親()または$( "span")など、フィルタリングのためにexprを渡すことができます。
jquery.parents(expr)、jquery.parents(expr)に似ていますが、親要素に限定されないすべての祖先要素を検索します
jquery.children(expr)。すべての子ノードを返します。この方法は、直接の子ノードのみを返し、すべての子ノードを返すわけではありません。
jquery.contents()は、ノードやテキストを含む次のすべてのコンテンツを返します。この方法と子供の違いは、空白のテキストを含む()ことも、
jQueryオブジェクトは返されます、子供()はノードのみを返します
jquery.prev()は、すべての兄弟ノードではなく、前の兄弟ノードを返します
jquery.prevall()、以前のすべての兄弟ノードを返します
jquery.next()は、すべての兄弟ノードではなく、次の兄弟ノードを返します
jquery.nextall()、その後のすべての兄弟ノードを返します
jquery.siblings()は、前面と背面に関係なく、兄弟ノードを返します
jquery.find(expr)は、jquery.filter(expr)とはまったく異なります。 jquery.filter()は、最初のjQueryオブジェクトコレクションの一部を除外し、jquery.find()
$( "p")、find( "span")、<p>要素から<span>を探し始めるなど、最初のコレクションにはコンテンツがありません。これは$( "p span")に相当します。
上記の記事JSは、要素のすべての兄弟ノードを取得することです。私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。