有没有办法使用jquery从属性中删除特定值?

时间:2012-12-06 02:03:02

标签: javascript jquery

我有一个显示产品的页面。在包含<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');

4 个答案:

答案 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 ',''));

http://jsfiddle.net/laupkram/fg3dn/

答案 3 :(得分:-2)

试试这个

var attr = $("#products").attr('subcategorynavids');
$("#products").attr('subcategorynavids', attr.replace('8019',''));

首先获取该属性中的值并过滤掉关键字并再次设置新属性..简单如此