jQuery过滤器不返回数据元素,只返回整个对象

时间:2014-10-15 14:52:34

标签: javascript jquery

我正在尝试filter()来自<select>的jQuery列表,如果文本匹配则返回data属性。匹配工作,但我没有得到数据属性中包含的字符串:我得到整个对象

$("#company_select option").filter(function(){
    var d = $(this).data("company_system_name");
    if ($(this).text() === val ) { return  d; };
})

为什么会这样。如何获取返回的数据属性?

4 个答案:

答案 0 :(得分:2)

看起来你想要:

var optData = $("#company_select option").filter(function(){
    return $(this).text() === val;
}).data("company_system_name");

答案 1 :(得分:1)

$.fn.filter方法返回已过滤的jQuery集合。根据您的需要,您可以将第一个筛选的元素数据或所有数据属性作为数组获取:

var $options = $("#company_select option").filter(function() {
    return $(this).text() === val;
});

// Get the data of the first filtered option
var firstData = $options.data('company_system_name');

// Get an array of all data attributes
var allData = $options.map(function() {
    return $(this).data("company_system_name");
}).get();

答案 2 :(得分:0)

过滤器用于根据您选择的条件减少一组匹配的元素。要从中实际获取数据,您需要执行以下操作:

var d = $("#company_select option").filter(function(){
    return $(this).text() == val;
}).data('company_system_name');

答案 3 :(得分:0)

尝试

var val = "a"
    , _data = $.map($("#company_select option"), function(el, i) {
                  return $(el).text() === val 
                         ? $(el).data("company_system_name")
                         : null
              });
console.log(_data)

&#13;
&#13;
var val = "a"
    , _data = $.map($("#company_select option"), function(el, i) {
    return $(el).text() === val 
      ? $(el).data("company_system_name")
      : null
})

console.log(_data)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="company_select">
    <option data-company_system_name="a">a</option>
    <option data-company_system_name="b">b</option>
    <option data-company_system_name="b">b</option>
</select>
&#13;
&#13;
&#13;