我有一个显示产品的页面。在包围<ul>
我有一些 jQuery 可以为属性添加值(例如 <ul id="products" subcategorynavids="someValue">
)。
当用户单击过滤链接时,jQuery 会检查 subcategorynavids
的内容然后只显示下面列出的具有 navid 的产品。
我遇到的问题是,当属性列出了多个值,并且用户第二次单击过滤器链接(以禁用它)时,我只需要删除被禁用的值。 ..
例如,如果页面设置为 <ul id="products" subcategorynavids="9007 8019 7365">
然后用户单击启用/禁用 navid="8019"
的过滤器, 如何删除 '8019' 并保留 '9007' 和 '7365'?
我知道有 .removeAttr()
, .removeProp()
,但那些只会完全删除属性(对吗?)。
我尝试了以下方法(正如预期的那样,没有用)...
$("#products").attr('subcategorynavids').remove('8019');
最佳答案
没有内置的 jQuery 方法可以做到这一点,您必须手动完成。
$('#products').attr('subcategorynavids', function (_, val) {
return jQuery.grep(val.split(' '), function (val) {
return val !== '8019';
}).join(' ');
});
这里我们使用attr()
的回调方式来更新一个属性。在函数内部,我们将当前值 val
除以 ' '
,然后使用 jQuery'sgrep()
过滤结果数组中不是 8019
的值函数*,然后将数组重新连接在一起并将其返回为 subcategorynavids
的新值。
* 我想使用 Array
的 filter()
方法,但并非所有现代浏览器都支持它,因此您不妨使用 grep()
.
关于javascript - 有没有办法使用 jquery 从属性中删除特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735809/