1

特定の属性を持つすべての要素を見つけるにはどうすればよいですか。

私の要素には、特定のパターンに従う属性があります。いくつかの例を次に示します。

 <div data-jtemplate-href="x"></div>
 <span data-jtemplate-text="x"></span>
 <input data-jtemplate-something="x"/>
 <table data-jtemplate-else="x"></table>

ご覧のとおり、すべての要素には、名前にプレフィックス「data-jtemplate」が付いた属性があります。属性プレフィックス data-jtemplate を持つすべての要素を見つけるにはどうすればよいですか?

4

3 に答える 3

3

独自の式を作成します。http://jsfiddle.net/6pCh4/を参照してください。

$.expr[":"].dataAttrStartingWith = function(el, i, m) {
  for (var p in $(el).data()) {
     if (p.substring(0, m[3].length) === m[3]) return true;    
  }
  return false;
};  


console.log($('body *:dataAttrStartingWith(jtemplate)'))

この式は、data-jtemplate-*属性を持つすべての要素をフィルタリングします(フィドルでわかるように、このフィルターによって正しく破棄された別の要素を追加しました)

もちろん、これは他のdata-*属性でカスタマイズ可能です(jtemplateセレクターで変更するだけです)

于 2012-05-11T15:39:56.940 に答える
3

Just add another attribute (data- or otherwise) that you can search on:

 <div class="jtemplate" data-jtemplate-href="x"></div>
 <span class="jtemplate" data-jtemplate-text="x"></span>
 <input class="jtemplate" data-jtemplate-something="x"/>
 <table class="jtemplate" data-jtemplate-else="x"></table>

No need to define it as a CSS style. Now all you need is the selector $('.jtemplate') to get all those elements.

于 2012-05-11T15:27:34.497 に答える
1

これに従ってマークアップを変換することをお勧めします。

<div "data-jtemplate"="href-x"></div>
<span "data-jtemplate"="text-y"></span>
<input "data-jtemplate"="something-z" />
<table "data-jtemplate"="else-v"></table>

これで、非常に簡単な検索を実行できます。

var jTemplate = $("*[data-jtemplate]") // selects all elements with that prefix
$("*[data-jtemplate^='href-']", jTemplate) // select all elements with href in jTemplate scope
$("*[data-jtemplate^='text-']").each( function(i, ele)
{
   var attr = $(this).attr("data-jtemplate").replace("text-",""); // gives you actual value of the attribute
});

アップデート:

<div 'data-jtemplate'='{href:"http://example.com",text:"example",attr:10,private:false}'></div> 
// {href:"http://example.com",text:"example",attr:10,private:false} -> easy to create on the server

var json = $("[data-jtemplate]").eq(0).attr("data-jtemplate");
var parsedData = $.parseJSON(json);
var href = parsedData.href; // etc -- easy to access
于 2012-05-11T15:39:46.527 に答える