根据属性的值是否用双引号括起来进行选择

时间:2018-04-09 17:53:53

标签: html css css-selectors

我在特定标签上有一个自定义属性,我想要一个只有在属性值用双引号括起来时才会匹配的选择器。我发现了几个问题/答案,关于是否需要在房产周围引用,但在我的情况下,我会有一些带引号的值,有些没有。

例如,我可能有一些包含以下内容的HTML:

<p myProperty=12345>some text</p>
<p myProperty="12345">some text</p>
<p myProperty="67890">some text</p>

有没有办法编写一个只选择第二个和第三个元素的选择器?实际值是无关紧要的,我只想要那些特定属性的值用引号括起来的元素。

到目前为止,我的实验和阅读表明,当引号出现时,在与以下内容匹配时,它们会被忽略:

a[myProperty*='"'] { ... }

但我希望有人知道这样做的方法。

2 个答案:

答案 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本身不符合您的要求。