Javascript 如何使用多个属性选择器,但不使用特定属性值?
我正在使用jQuery,我有以下HTML代码: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]';
<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(…)