Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 如何使用多个属性选择器,但不使用特定属性值?_Javascript_Jquery_Html_Jquery Selectors_Attributes - Fatal编程技术网

Javascript 如何使用多个属性选择器,但不使用特定属性值?

Javascript 如何使用多个属性选择器,但不使用特定属性值?,javascript,jquery,html,jquery-selectors,attributes,Javascript,Jquery,Html,Jquery Selectors,Attributes,我正在使用jQuery,我有以下HTML代码: <a href="/link" data-a='{"one":"sample1","two":"sample2"}' data-b="true">Title</a> 但是我想通过查找具有data-a和data-b属性且其属性data-a包含one键的链接来更具体一些 我该怎么做呢?这会起作用,但不能保证data-a是有效的json lol select = 'a[data-a*=\'"one":"\'][data-b]';

我正在使用jQuery,我有以下HTML代码:

<a href="/link" data-a='{"one":"sample1","two":"sample2"}' data-b="true">Title</a>
但是我想通过查找具有
data-a
data-b
属性且其属性
data-a
包含
one
键的链接来更具体一些


我该怎么做呢?

这会起作用,但不能保证data-a是有效的json lol

select = 'a[data-a*=\'"one":"\'][data-b]';
使用“contains”选择器:

我们可以
.filter()
第一组集合,以确保元素的data-*属性是否包含特定键

你可以这样做

$('a[data-a][data-b]').filter(function(){
 return 'key' in JSON.parse($(this).data('a'));
}).bind(..)

分析属性的内容超出了的范围。您需要通过所选元素手动执行此操作:

$('a[data-a][data-b]').filter(function() {
    try {
        return "one" in JSON.parse($(this).attr("data-a"));
    } catch(e) {
        return false;
    }
}).on(…)
你当然可以(或1),但那没有多大区别。并且可能会显著降低性能


1:嗯,最好不要使用JSON。

不,解析属性的内容超出了本文的范围。您需要手动执行该操作。@Bergi-如果是这样,我如何/应该改进代码和相关选择器?您可以尝试使用
*=
操作符,如
a[data-a*=''one''][data-b]{…}
恐怕您编辑的HTML代码不是格式良好的JSON字符串,它应该是
data-a='{“one”:“sample1”,“two”:“sample2”}
$('a[data-a][data-b]').filter(function() {
    try {
        return "one" in JSON.parse($(this).attr("data-a"));
    } catch(e) {
        return false;
    }
}).on(…)