我目前正处于这种状况。我收到了像这样的AJAX调用的响应
...responseJSON.d.results : [
{
"Title" : "SomeTitle",
"Id" : 1
},
{
"Title" : "SomeOtherTitle",
"Id" : 2
}
]
现在我想查看我的DOM中的选项,并检查Value-Attributes是否是请求中我的ID的一部分。通常我会创建一个包含所有ID的数组
var ids = [];
$.each(response.JSON.d.results, function(){
ids.push(this.Id)
});
之后,我将迭代选项并删除它们,如果在数组中找不到属性,如
$.each($('option.someClass'), function(){
if(ids.indexOf(parseInt($(this).attr('value'))) === -1) $(this).remove()
});
然而,我发现它有点不太优雅。我想知道是否有更轻薄的方法来做到这一点。非常感谢帮助。
答案 0 :(得分:3)
要从数组中获取ID,您可以使用Array#map
var ids = response.JSON.d.results.map(o => o.Id);
这将包含数组中的所有ID。
现在,要删除<option>
不在上述数组中的value
,您可以从数组中创建一个选择器。
$('option.someClass')
.not('option[value="' + ids.join('"].someClass, option[value="') + '"].someClass')
.remove();
字符串连接和数组连接将以格式
提供选择器"option[value="1"].someClass, option[value="2"].someClass, option[value="3"].someClass"
可直接与jQuery一起使用。
var arr = [{
"Title": "SomeTitle",
"Id": 1
}, {
"Title": "SomeOtherTitle",
"Id": 2
}];
var ids = arr.map(o => o.Id);
$('option.someClass')
.not('option[value="' + ids.join('"].someClass, option[value="') + '"].someClass')
.remove();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value="1" class="someClass">1</option>
<option value="2" class="someClass">2</option>
<option value="3" class="someClass">3</option>
<option value="4" class="someClass">4</option>
<option value="5" class="someClass">5</option>
</select>
&#13;