使用 jQuery 添加附加数据以选择选项

IT技术 javascript jquery html
2021-02-11 23:19:23

很简单的问题,我希望。

我有这样的普通<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)。

6个回答

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 是的,它会的。(如果您发现这些答案中的任何一个有用,您应该投票支持它们。如果您发现它最能解决您的问题,您还应该将其标记为“已接受”。)
2021-03-19 23:19:23
什么?不,不会。它适用于所有支持 HTML5 数据属性的浏览器。
2021-03-19 23:19:23
@Phrogz 我知道这一点。这不是浏览器“支持”无效属性的问题,而是忽略它们的问题。真的没有其他方法可以编写一个可用的 Web 浏览器 :) 但是我认为将数据属性称为“语法有效”是一种延伸 - 这取决于您的上下文。如果您有 HTML5 文档类型,那么是的,它们是有效的。否则它们不会并且会导致 W3C 验证失败。
2021-03-23 23:19:23
@ithcy 所有浏览器都支持(并且已有 10 多年)标记中的“无效”属性,并通过 DOM 获取/设置这些属性。HTML5“数据”属性只是具有命名方案和声明它们合法的新标准的自定义属性。
2021-03-30 23:19:23
而不是selected.getAttribute('data-foo');你可以使用selected.dataset.foo
2021-04-11 23:19:23

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

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

要做到这一点,你可以这样做

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

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

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

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

正如@stephenbayer 所提到的......现在正确的方法是使用 html5 支持的 data-* 属性。最初在 2010 年回答时,这些属性并没有真正出现/大量使用:)
2021-03-18 23:19:23
好吧,在原始标记中包含非标准属性在语法上是无效的,但是 a) 我从来没有见过任何浏览器,因为 NS4 的日子有任何问题,b) 如果你可以修改 DOM产生“语法上无效”的东西,真的吗?
2021-03-27 23:19:23
是的,它真的……无效。为什么在 html5 标准中定义了 data-* 属性时使用任意属性。
2021-03-27 23:19:23
另一种方法是使用 $(selector).data('value2', "your value") 和 $(selector).data('value2') 来检索...仍然有效。
2021-04-03 23:19:23

我从我认为你的问题可能是两个例子:

http://jsfiddle.net/grdn4/

检查这个以存储附加值。它使用数据属性来存储另一个值:

http://jsfiddle.net/27qJP/1/

HTML

<Select id="SDistrict" class="form-control">
    <option value="1" data-color="yellow" > Mango </option>
</select>

JS 初始化时

   $('#SDistrict').selectize({
        create: false,
        sortField: 'text',
        onInitialize: function() {
            var s = this;
            this.revertSettings.$children.each(function() {
                $.extend(s.options[this.value], $(this).data());
            });
        },
        onChange: function(value) {
            var option = this.options[value];
            alert(option.text + ' color is ' + option.color);
        }
    });

您可以使用 option.[data-attribute] 访问选项标签的数据属性

JS小提琴https : //jsfiddle.net/shashank_p/9cqoaeyt/3/

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>
2021-03-25 23:19:23