1

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

4 回答 4

3

没有内置的 jQuery 方法可以做到这一点,您必须手动完成。

$('#products').attr('subcategorynavids', function (_, val) {
    return jQuery.grep(val.split(' '), function (val) {
        return val !== '8019';
    }).join(' ');
});

这里我们使用 using 的回调方式attr()来更新一个属性。在函数内部,我们将当前值val除以' ',然后将结果数组过滤为那些不8019使用jQuerygrep()函数*的数组,然后将数组重新连接在一起并将其返回为 的新值subcategorynavids

* 我想用Array'filter()方法,但不是所有现代浏览器都支持,所以你不妨使用grep().

于 2012-12-06T02:06:08.370 回答
2

在这种情况下,您可以只使用.replace()

var $attrs = $("#products").attr('subcategorynavids');
$("#products").attr( 'subcategorynavids', $attrs.replace( '8019', '' ));
于 2012-12-06T02:05:18.200 回答
0

使用 .replace()

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

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

于 2012-12-06T02:09:30.170 回答
-2

试试这个

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

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

于 2012-12-06T02:14:00.340 回答