使用jQuery添加其他数据以选择选项

jim*_*ith 131 html javascript jquery

我希望非常简单的问题.

我有这样的常用<select>盒子

<select id="select">
    <option value="1">this</option>
    <option value="2">that</option>
    <option value="3">other</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我可以获取所选值(通过使用$("#select").val())和所选项目的显示值(通过使用$("#select :selected").text().

但是我如何在<option>标签中存储额外的值?我希望能够做类似的事情<option value="3.1" value2="3.2">other</option>并获得value2属性的值(在示例中为3.2).

Phr*_*ogz 302

HTML标记

<select id="select">
  <option value="1" data-foo="dogs">this</option>
  <option value="2" data-foo="cats">that</option>
  <option value="3" data-foo="gerbils">other</option>
</select>
Run Code Online (Sandbox Code Playgroud)

// JavaScript using jQuery
$(function(){
    $('select').change(function(){
       var selected = $(this).find('option:selected');
       var extra = selected.data('foo'); 
       ...
    });
});

// Plain old JavaScript
var sel = document.getElementById('select');
var selected = sel.options[sel.selectedIndex];
var extra = selected.getAttribute('data-foo');
Run Code Online (Sandbox Code Playgroud)

认为这是在这里使用jQuery工作示例:http://jsfiddle.net/GsdCj/1/
认为这是这里使用普通的JavaScript工作示例:http://jsfiddle.net/GsdCj/2/

通过使用HTML5中的数据属性,您可以以语法有效的方式向元素添加额外的数据,也可以从jQuery轻松访问.

  • @ithcy所有浏览器都支持(并且有10年以上)标记中的"无效"属性,并通过DOM获取/设置这些属性.HTML5"数据"属性只是具有命名方案的自定义属性,并且声明它们是合法的新标准. (13认同)

mik*_*r87 5

对我来说,听起来像您要创建一个新属性?你想要

<option value="2" value2="somethingElse">...
Run Code Online (Sandbox Code Playgroud)

为此,您可以

$(your selector).attr('value2', 'the value');
Run Code Online (Sandbox Code Playgroud)

然后要检索它,您可以使用

$(your selector).attr('value2')
Run Code Online (Sandbox Code Playgroud)

它不是有效的代码,但我想它可以完成工作。

  • 正如@stephenbayer提到的...现在正确的方法是使用html5支持的data- *属性。当最初在2010年回答时,这些属性并不是真正的/大量使用:) (2认同)