0

と呼ばれるおよび追加の属性<option>に多くの があります<select>zip

<SELECT id="city">
  <OPTION zip="AUC 1291 100005" value="1">City 1</OPTION>
  <OPTION zip=" 1295 100006" value="2">City 2</OPTION>
  <OPTION zip=" 1299 100008" value="3">City 3</OPTION>
</SELECT>

ここで、テキストまたは ZIP に文字列値が含まれるオプションを選択したいのですが、次のコードは機能しません。

var val = '1291'; //Zip code
var x = $('#city option:contains('+val+'), #city zip:contains('+val+')').val();

なんで?

4

3 に答える 3

3

属性を持つ要素を選択したい場合、値に要求された文字列が含まれている場合は、次を使用する必要があります。

  var val = '1291'; //Zip code
  var x = $('#city option[zip*="' + val + '"]').val();

前述のとおり: http://api.jquery.com/attribute-contains-selector/

しかし、みんなが言ったように、より良い方法は、代わりに HTML5data-zip属性を持つことですzip

(接頭辞を付けるだけdata-です)。

この場合、セレクターは次のようになります。

  var x = $('#city option[data-zip*="' + val + '"]').val();

それが役に立ったことを願っています。

于 2013-03-24T13:10:45.800 に答える
0

これが私の質問に対する答えです。テスト済みで動作します:)

var x = $('#city option:contains('+val+'), #city [data-zip*='+val+']').val();
于 2013-03-24T13:26:25.797 に答える
0

contains属性ではなく内部要素をチェックします。次のようなものを使用する必要があります。

$('#city option').filter(function(){
    return this.innerHTML.indexOf(val) > -1 || 
           $(this).attr('zip').indexOf(val) > -1;
});

zipは有効な HTML 属性ではないことに注意してくださいdata-zip。代わりに使用することをお勧めします。

$('#city option').filter(function(){
    return this.innerHTML.indexOf(val) > -1 || 
           $(this).data('zip').indexOf(val) > -1;
});
于 2013-03-24T12:53:25.893 に答える