Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法使用jquery从属性中删除特定值?_Javascript_Jquery - Fatal编程技术网

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

Javascript 有没有办法使用jquery从属性中删除特定值?,javascript,jquery,Javascript,Jquery,我有一个显示产品的页面。在包含的中,我有一些jQuery,它向属性添加值(例如) 当用户单击筛选链接时,jQuery将检查子类别navids的内容,然后仅显示下面列出了navid的产品 我遇到的问题是,当属性列出多个值时,用户第二次单击过滤器链接(要禁用它),我只需要删除被禁用的值 例如,如果页面设置为,并且用户单击启用/禁用navid=“8019”,如何删除“8019”并保留“9007”和“7365” 我知道有.removeAttr(),.removeProp(),但这些只会完全删除属性(对吧

我有一个显示产品的页面。在包含的
中,我有一些jQuery,它向属性添加值(例如

当用户单击筛选链接时,jQuery将检查
子类别navids
的内容,然后仅显示下面列出了navid的产品

我遇到的问题是,当属性列出多个值时,用户第二次单击过滤器链接(要禁用它),我只需要删除被禁用的值

例如,如果页面设置为
,并且用户单击启用/禁用
navid=“8019”
,如何删除“8019”并保留“9007”和“7365”

我知道有
.removeAttr()
.removeProp()
,但这些只会完全删除属性(对吧?)

我尝试了以下方法(正如预期的那样,没有成功)


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


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

$('#products').attr('subcategorynavids', function (_, val) {
    return jQuery.grep(val.split(' '), function (val) {
        return val !== '8019';
    }).join(' ');
});
这里我们使用的回调方法更新属性。在函数内部,我们将当前值
val
'
拆分,然后使用函数*过滤结果数组中那些不是
8019
的值,然后将数组重新连接在一起,并将其返回为
子类别Navids
的新值

*我想使用
Array
filter()
方法,但不是所有现代浏览器都支持它,所以您最好使用
grep()

use.replace()

试试这个

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

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

记住,使用jQuery迭代器回调时,需要向后考虑WRT参数。
idx
参数首先出现。。。不幸的是,对自定义HTML属性使用
data-
attributes,以便它们与HTML5向前兼容。不客气,但它非常简短,这是您唯一需要的吗?@derekmx271:请注意,使用这种方法时,ID中包含其他ID。如果您有
subcategorynavids=“12 1”
,并且您试图删除
1
,那么您将只剩下
subcategorynavids=“2 1”
(默认情况下,
replace()
仅替换第一个实例)。@Mahan:
subcategorynavids=“12 3 2”
,现在尝试删除
2
)(将有
子类别navids=“13 2”
)您不需要
.indexOf()
。只需执行
.replace()
,如果没有匹配项,就不会有任何更改。此外,您还需要存储
.replace()
的结果,因为字符串是不可变的。这非常有效!在@Matt指出可能会发生一些不希望发生的行为后,他感到担忧。但我认为我使用的是四位数的id,这种方法会很好地工作:)谢谢!很高兴我能帮忙!@Matt问题的简单解决方案是在id中填充一些空格,然后将值包装到replace函数中。e、 g.
子类别navids=“9007 8019 7365”
,然后在替换中:
.replace('8019','')。现在,我们可以确保没有其他ID受到影响!:)
$('#products').attr('subcategorynavids', function (_, val) {
    return jQuery.grep(val.split(' '), function (val) {
        return val !== '8019';
    }).join(' ');
});
$("#products").attr('subcategorynavids',$("#products").attr('subcategorynavids').replace('8019 ',''));
var attr = $("#products").attr('subcategorynavids');
$("#products").attr('subcategorynavids', attr.replace('8019',''));