3

私はトリッキーなものに出くわしました.参照を見つけることができませんでした.

問題

attribute-name (注: attribute-valueではない) が特定の文字列で始まるすべての子要素を取得する必要があります。

だから私が持っている場合:

<a data-prefix-age="22">22</a>
<a data-prefix-weight="82">82</a>
<a href="#">meh</a>

私のクエリは、 data-prefix--prefixを持つ最初の 2 つの要素のコレクションを返します。

このクエリを作成する方法についてのアイデアはありますか?

私は次のようなものを目指していました:

$(document).find("[data-prefix-*]")

しかし、もちろんそれは有効ではありません

うまくいけば、あなたの1人がこれを解決する方法についてより鋭い目を持っています.

解決

(以下の受け入れられたコード例を参照してください)

部分的な属性名を照会する直接的な方法はないよう です。代わりにすべきこと(これは可能な解決策の1つにすぎません)は

  1. 可能な限り最小の要素のコレクションを選択します
  2. それらを繰り返す
  3. 次に、要素ごとに、要素の属性を反復処理します
  4. ヒットを見つけたら、コレクションに追加します
  5. 次に、ループを離れて、チェックする次の要素に進みます。

必要な要素を含む配列になるはずです。

それが役に立てば幸い :)

4

2 に答える 2

2

おそらくこれでうまくいくでしょう -

    // retrieve all elements within the `#form_id` container
    var $formElements = $("form#form_id > *");

    var selectedElements = [];
    // iterate over each element
    $formElements.each(function(index,elem){
        // store the JavaScript "attributes" property
        var elementAttr = $(this)[0].attributes;
        // iterate over each attribute
        $(elementAttr).each(function(attIndex,attr){
            // check the "nodeName" for the data prefix
            if (attr.nodeName.search('data-.*') !== -1){
               // we have found a matching element!
               if (selectedElements.length < 2){
                 selectedElements.push(elem);
                 break;
               }else{
                 if (selectedElements.length == 2){
                   break(2);
                 }
               }
            }
        });
    });

selectedElements最初の 2 つの一致する要素を保持するようになりました。

jsフィドル

于 2012-07-26T22:49:12.737 に答える
0

jquerys filter()メソッドを使用して、選択要素を関数で処理することができます。その関数の中で、あなたはあなたがやりたいことを自由に行うことができます。

したがって、DOMツリー内のすべての要素を選択することから始めて、嫌いなものをすべて除外します。特に高速ではありませんが、機能しています。

于 2012-07-26T22:47:32.097 に答える