2011-12-03 3 views
1

を子孫、jQueryのすべてではなく、私はマークアップを以下している特定のタイプの

<div custom=""> 
    <div> 
    <template> 
     <a custom=""> (anything inside template should not be selected) 
     </a> 
    </template> 
    </div> 
</div> 

<a custom=""></a> 

私はカスタム属性ではなく、内部の「テンプレート」ノードで何かを持っているすべての要素を選択します。私は、次の試してみましたが、動作しません

$(":not(template *) [custom]") 
$(":not(template) [custom]") 
$(":not(template) *[custom]") 
$(":not(template *)[custom]") 
$(":not(template)").filter('[custom]')) // this does not work either... 
$(":not(template,template *)").filter('[custom]')) // this does not work either... 

しかし、これは動作しません。これを行う簡単な方法はありますか?私はクエリの要素を取得していません。

私は知っている、テンプレートは標準的なHTMLではありません。しかし、私のカスタムタグは、マークアップの検証が不可能な非標準のスクリプトではなく、html内に適切なタグを持つことができます。

+1

btw代わりに、 'data-custom =" "'のようなデータ属性を使用しないでください。 –

+0

まあ、データ属性を使用するライブラリがたくさんあり、入力には多すぎる文字が必要ですが、データのカスタムをすべての属性にプレフィックスを付けると、非常に長くなりますし、カスタムを使用することに決めました(私たちの命名規則の一部であるカスタムの代わりに適切な単語があります)。事実、2つのレベルまで多くのカスタム属性があります。 –

答えて

2

このショットを投稿してください。

$('[custom]:not(template *)'); 

jsFiddleです。

これはcustom属性(子孫も含めてtemplateを含む)を持つすべての要素を選択し、template要素の子孫である要素を破棄します。

0

[custom]属性を最初に一致させてから、:notセレクタを試してみてください。

$("[custom] :not(template)")