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


139

我希望这是一个非常简单的问题。

我有平常的 <select>像这样盒子

<select id="select">
    <option value="1">this</option>
    <option value="2">that</option>
    <option value="3">other</option>
</select>

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

但是,如何在<option>标签中像附加值一样存储呢?我希望能够做类似的事情<option value="3.1" value2="3.2">other</option>并获取value2属性的值(在示例中为3.2)。


您想要将一个项目添加到选择框?还是希望一次选择多个选项并获得结果?
zsalzbank

不,我只是希望在<option>标记中像value2 =“”一样,但这不起作用
jim smith 2010年

您的问题不清楚(无论如何对我来说)。“将其他值存储在选择选项中”是什么意思?您是否要向选择添加一个新选项,该选项在打开时会显示给用户?
Phrogz 2010年

15
不能违抗逻辑或理由,老兄 我有一个类似的问题/案例,因此我可以比较选择之间的值并将一个选项的文本保存到另一个选项中,同时保持该选择的值/文本,一种可能的方式是通过数据,如下面的答案所示。仅仅因为您没有想到它并不意味着它违反了逻辑和理由。OP是一个足够体面的问题,他只需要指出正确的方向,而不是沾沾自喜。
user1783229 2013年

1
您始终可以使用data-anything和.data('anything')来添加任意数量的其他参数,否则将使用.value。只需将任何东西换成value2或类似的东西

Answers:


320

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>

// 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');

在此处使用jQuery将其视为工作示例:http : //jsfiddle.net/GsdCj/1/在此处将
其作为使用普通JavaScript的工作示例:http : //jsfiddle.net/GsdCj/2/

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


@jimsmith是的,它将。(如果您发现这些答案中的任何一个有用,则应将其投票。如果发现它最能解决您的问题,则也应将其标记为“已接受”。)
Phrogz 2010年

1
什么?不,不会。它将在所有支持HTML5数据属性的浏览器中运行。
glomad10年

13
@ithcy所有浏览器都在标记中支持(并具有10年以上)“无效”属性,并通过DOM获取/设置这些属性。HTML5“数据”属性只是具有命名方案和宣布其合法的新标准的自定义属性。
Phrogz 2010年

@Phrogz我知道这一点。这不是浏览器“支持”无效属性的问题,而是忽略它们的问题。确实没有其他方法可以编写可用的Web浏览器:)但是,我认为将数据属性称为“在语法上有效”是很麻烦的-这取决于您的上下文。如果您有HTML5文档类型,则可以,它们是有效的。否则,它们不是,并且将导致W3C验证失败。
glomad11 2011年

@ithcy浏览器“无视”它们,只要它们对它们没有特殊之处,但只要它们完全可用,它们就不会忽略它们getAttribute()。我是在回应您最初的说法,即我的回答不适用于所有浏览器。我坚持说它将在“所有”浏览器中工作(在这种情况下,对于“所有”的相当宽泛的定义),我表示支持。向我展示一个支持jQuery但不能使用这些数据属性的浏览器-即使使用非HTML5文档类型-我也会吃掉我的话。
Phrogz

5

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

<option value="2" value2="somethingElse">...

为此,您可以

$(your selector).attr('value2', 'the value');

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

$(your selector).attr('value2')

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


另一种方法是使用$(selector).data('value2',“您的值”)和$(selector).data('value2')来检索...,该方法仍然有效。
mikesir87

好吧,在原始标记中具有非标准属性在语法上无效,但是a)自从NS4时代以来,我从未见过任何浏览器,并且b)如果您可以修改DOM产生“语法上无效”的东西,真的吗?
Phrogz

是的,这确实是……无效。当在html5标准中定义了data- *属性时,为什么要使用任意属性。
stephenbayer 2014年

3
正如@stephenbayer提到的那样,现在正确的方法是使用html5支持的data- *属性。最初在2010年回答时,这些属性并未真正出现/在大量使用中:)
mikesir87


-1

HTML / JSP标记:

<form:option 
data-libelle="${compte.libelleCompte}" 
data-raison="${compte.libelleSociale}"   data-rib="${compte.numeroCompte}"                              <c:out value="${compte.libelleCompte} *MAD*"/>
</form:option>

JQUERY代码:事件:更改

var $this = $(this);
var $selectedOption = $this.find('option:selected');
var libelle = $selectedOption.data('libelle');

具有元素libelle.val()或libelle.text()


<form:option data-libelle-compte =“ $ {compte.libelle} data-raison =” $ {compte.raison}“ data-compte =” $ {compte.numero}“> <c:out value =” $ {compte.libelleCompte} MAD “ /> </ form:option>
Fadid

-4

要在选择选项中存储另一个值:

$("#select").append('<option value="4">another</option>')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.