我有一个显示产品的页面。在包含<ul>
中,我有一些jQuery为属性添加值(例如<ul id="products" subcategorynavids="someValue">
)。
当用户点击过滤链接时,jQuery会检查subcategorynavids
的内容,然后只显示下面列出了导航列表的产品。
我遇到的问题是,当属性列出了多个值,并且用户再次单击过滤器链接(要禁用它)时,我只需要删除正在禁用的值。 ..
例如,如果页面设置为<ul id="products" subcategorynavids="9007 8019 7365">
且用户点击启用/禁用navid="8019"
的过滤器,如何删除'8019'并保留'9007'和'7365 “?
我知道有.removeAttr()
,.removeProp()
,但这些只会删除属性(对吗?)。
我尝试了以下(正如预期的那样,没有用)......
$("#products").attr('subcategorynavids').remove('8019');
答案 0 :(得分:3)
没有内置的jQuery方法,你必须手动完成。
$('#products').attr('subcategorynavids', function (_, val) {
return jQuery.grep(val.split(' '), function (val) {
return val !== '8019';
}).join(' ');
});
这里我们使用回调的方式使用attr()
来更新属性。在函数内部,我们将当前值val
除以' '
,然后使用jQuery'sgrep()
函数*对那些不是8019
的数组进行过滤,并且将数组连接在一起并将其返回为subcategorynavids
的新值。
*我想要使用Array
的{{1}}方法,但在所有现代浏览器中都不支持,所以你不妨使用{{ 1}}。
答案 1 :(得分:2)
在这种情况下,您可以使用.replace()
var $attrs = $("#products").attr('subcategorynavids');
$("#products").attr( 'subcategorynavids', $attrs.replace( '8019', '' ));
答案 2 :(得分:0)
使用.replace()
$("#products").attr('subcategorynavids',$("#products").attr('subcategorynavids').replace('8019 ',''));
答案 3 :(得分:-2)
试试这个
var attr = $("#products").attr('subcategorynavids');
$("#products").attr('subcategorynavids', attr.replace('8019',''));
首先获取该属性中的值并过滤掉关键字并再次设置新属性..简单如此