3

jQuery/sizzle の CSS セレクターのみを使用して、選択した要素の親を取得する方法はありますか?

jQueryの使用中に要素の親を取得できる必要がありますが、セレクターを文字列として受け取っており、「ユーザー」がツリーを上に移動できる必要があるため、使用できません。jQuery('#myelement').parent()

ドキュメントには何も表示されないので、ドキュメントに記載されていないのか、それとも使用できるハックがあるのか​​ 疑問に思っていますか?

4

4 に答える 4

3

正しい解決策 (つまり、jQuery API ではなくjQueryセレクターを実際に使用するもの) は次のとおりです。

$(':has(> #myElement)');

つまり、「現在の要素」は、実際には基本式ではなく「has」パラメーターでなければなりません。より少し読みにくいことを除いて、何も変更しないでください<

参考までに、次のようないくつかのケースでは、jQuery API がセレクターの有効な代替手段とならない場合があります。

$(document).on('click', ':has(> .widget)', function () {
    // ...
});

この場合、セレクターを使用してライブ イベントをフィルター処理できます。

于 2014-07-04T09:51:24.960 に答える
0

そのようなセレクターは存在せず、CSS にも jQuery/Sizzle にもありません。

ソースコードを変更できますか?

はいの場合、カスタム疑似セレクターを追加できます。

jQuery.expr[":"].getParent = function (node, index, prop, nodes) {
    return jQuery(node).parent(); 
};

使用例 (親は既に存在することに注意してください。代わりに getParent を使用しました):

jQuery('#myelement:getParent');
于 2010-03-05T14:50:30.107 に答える
0

CSS は XPath のようにツリーをたどることができないため、文字列内の文字を少し変更してチェックし、それを分割して手動で<呼び出しています。.parent()最適ではありませんが、機能しています。

于 2010-03-05T15:35:14.317 に答える
0

jQuery(jQuery('#myelement').parent())追加機能なしでオブジェクトを取得しています。

わかりました、冗談の終わり;)

ライブ機能のために選択された親が必要であると推測しているため、この方法では取得できません。

jQuery('#'+jQuery('#myelement').parent().attr('id')).live(something);

それはあなたがそれを機能させる方法です。親要素に id がない場合は、より複雑なトリックを使用できます

    //newline for reading comfort. skip it. --v
jQuery('[title='+jQuery('#myelement').parent() 
.attr('title',Math.round(Math.random()*100000)+']').attr('title')).live(something);

id または title または class を使用できますが、ページに既にあるものに応じて異なります

そして、 CSSセレクターだけで本当にそれを見つける必要がある場合-私が知る限り、これは設計上CSSセレクターでは不可能です

于 2010-03-05T13:20:12.873 に答える