クリックされたスパンからjQuery関数に "this"を渡して、クリックされた要素の最初の子に対してjQueryを実行することができます。うまくいかないようですが….
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
どのようにしてelementの:first-childを参照するのですか?
既存のjQueryセットによって提供されるコンテキストにセレクタを適用したい場合は、 find()関数 を試してください。
element.find(">:first-child").toggleClass("redClass");
JørnSchou-Rodeは、おそらくコンテキスト要素の最初の直接の子孫しか見つけたくないと言っていたので、 子セレクタ (>) 彼は も children()関数 を使うことができると指摘しています。 find()は、階層内の1レベルだけを検索します(これで十分です...)。
element.children(":first").toggleClass("redClass");
children
関数 を :first
セレクター とともに使用して、 single element
の最初の子を取得します。
element.children(":first").toggleClass("redClass");
私は jsperf テストを追加しました。
与えられた、notif = $('#foo')
jQueryのやり方:
$(":first-child", notif)
- 4,304 ops/sec - 最速notif.children(":first")
- 653 ops/sec - 85%遅いnotif.children()[0]
- 1,416 ops/sec - 67%遅いネイティブな方法:
ele.firstChild
- 4,934,32 ops/sec(上記のすべてのアプローチはfirstChild
と比較して100%遅くなります)notif[0].firstChild
- 4,913,658 ops/secしたがって、最初の3つのjQueryアプローチは、少なくとも1人目の子供にはお勧めできません(他の多くの人にも当てはまるとは思いません)。 jQueryオブジェクトがあり、first-childを取得する必要がある場合は、配列参照[0]
(推奨)または.get(0)
を使用してele.firstChild
を使用し、jQueryオブジェクトからネイティブDOM要素を取得を取得します。これにより、通常のJavaScriptの使用と同じ結果が得られます。
すべてのテストはChrome Canary build v15.0.854.0で行われます
element.children().first();
すべての子供を見つけて、最初にそれらを入手してください。
やってみました
$(":first-child", element).toggleClass("redClass");
私はあなたがあなたの検索のためのコンテキストとしてあなたの要素を設定したいと思います。これを実行するためのより良い方法があるかもしれません。
私はちょうど可能であれば.firstElementChild
を使用するプラグインを書いたところで、必要ならば個々のノードを繰り返し処理することに戻ります
(function ($) {
var useElementChild = ('firstElementChild' in document.createElement('div'));
$.fn.firstChild = function () {
return this.map(function() {
if (useElementChild) {
return this.firstElementChild;
} else {
var node = this.firstChild;
while (node) {
if (node.type === 1) {
break;
}
node = node.nextSibling;
}
return node;
}
});
};
})(jQuery);
純粋なDOMソリューションほど速くはありませんが、Chrome 24の下の jsperfテスト では、他のどのjQueryセレクタよりも数桁高速でしたベースの方法。
あなたはDOMを使用することができます
$(this).children().first()
// is equivalent to
$(this.firstChild)
これは、次のような単純な魔法で実行できます。
$(":first-child", element).toggleClass("redClass");
参照: http://www.snoopcode.com/jquery/jquery-first-child-selector
この最初のもののようにそれを使用してください "myp"のようにタグpにクラス名を与えます
その後、次のコードを使用する
$(document).ready(function() {
$(".myp").click(function() {
$(this).children(":first").toggleClass("classname"); // this will access the span.
})
})