我在特定标签上有一个自定义属性,我想要一个只有在属性值用双引号括起来时才会匹配的选择器。我发现了几个问题/答案,关于是否需要在房产周围引用,但在我的情况下,我会有一些带引号的值,有些没有。
例如,我可能有一些包含以下内容的HTML:
<p myProperty=12345>some text</p>
<p myProperty="12345">some text</p>
<p myProperty="67890">some text</p>
有没有办法编写一个只选择第二个和第三个元素的选择器?实际值是无关紧要的,我只想要那些特定属性的值用引号括起来的元素。
到目前为止,我的实验和阅读表明,当引号出现时,在与以下内容匹配时,它们会被忽略:
a[myProperty*='"'] { ... }
但我希望有人知道这样做的方法。
答案 0 :(得分:0)
修改你的html,如下所示:
<p myProperty='12345'>some text</p>
<p myProperty='"12345"'>some text</p>
<p myProperty='"67890"'>some text</p>
单引号已用于包装属性值以允许使用双引号
使用以下选择器仅将p元素与双引号中的myProperty属性值匹配。
document.querySelectorAll("p[myProperty*='\"']");
“已在queryselector
中修改为\”答案 1 :(得分:0)
有没有办法编写一个只选择第二个和第三个元素的选择器?
不,这是不可能的,假设引号的位置可能会发生变化(即您不能仅使用p:nth-of-type(2), p:nth-of-type(3)
选择所需的元素,因为带引号的元素可能并不总是第一个{{1 }})。
事实上,完全不可能通过任何方式区分你的第一个和第二个p
元素(除了它们的源顺序除外),因为就DOM而言相关的是,它们相同,都具有p
属性,其值为myProperty
。引号的存在不会更改属性值,也不会更改HTML的解析方式并将其转换为DOM树。
如果您的HTML无法更改,并且关于引号位置的假设是真的,那么您唯一的办法是将源视为纯文本,而不是HTML,并使用自定义解析器手动解析它。正如目前所写,由于属性值引用的含义,HTML本身不符合您的要求。