转义CSS选择器中的双引号



我有一个html标签,

<div style="background-image: url("resources/images/test.jpg");"/>

我想使用CSS选择器定位这个元素。我尝试下面的选择器,但它抛出错误,

document.querySelector('*[style*="background-image: url("resources/images/test.jpg")"]')
Error: DOM Exception: SYNTAX_ERR (12)

我不得不转义"resources/images/test.jpg"周围的双引号。请让我知道,如果有任何方法,我可以转义它和目标标签。

问题不仅在于您的选择器字符串,还在于您的标记。url()值中的引号干扰了style属性值,导致无效的HTML。(/>位也是无效的,但这并不真正相关。)

由于您处理的是url()值,您可以简单地去掉引号:

<div style="background-image: url(resources/images/test.jpg);">

然后相应地修改选择器:

document.querySelector('*[style*="background-image: url(resources/images/test.jpg)"]');

另一方面,我强烈建议尝试以其他方式识别元素,例如通过使用类或基于标记的结构构造选择器,而不是针对style属性,这是脆弱的。如果您仍然需要测试这个样式,您应该在选择元素后使用window.getComputedStyle()查询元素的计算样式,因为很可能会使用内联样式。

如果您不能编辑标记,并且您在问题中给出的正是它的外观,那么不幸的是,您有无效的标记,并且即使使用有效的选择器,您也不可能匹配此元素。


如果你绝对必须在url()值中使用双引号,你有几个选择:

  • html -编码内引号:

    <div style="background-image: url(&quot;resources/images/test.jpg&quot;);">
    
  • 或者将外部双引号换成单引号,这样你就不必对任何东西进行html编码了:

    <div style='background-image: url("resources/images/test.jpg");'>
    

在属性选择器中使用双引号:

  • 你需要转义它们两次:一次用于选择器,另一次,这样它就不会破坏JavaScript字符串:

    document.querySelector('*[style*="background-image: url(\"resources/images/test.jpg\")"]');
    
  • 或者,您可以像上面那样交换引号,尽管您仍然需要转义一次内部双引号,以便它们不会破坏字符串:

    document.querySelector("*[style*='background-image: url("resources/images/test.jpg")']");
    

您还可以在url()值中使用单引号,在这种情况下,您需要遵循上述步骤,根据需要交换引号(除非不需要对任何html编码)。但正如你所看到的,这是非常复杂的;如果你可以编辑标记,我真的会完全去掉引号,避免所有这些。

试着这样做:

<div style="background-image: url(resources/images/test.jpg);"></div>

你不需要在图片的文件路径周围加上引号

你不需要使用引号,但是如果你需要,你总是可以使用单引号

在HTML中显示的div标签不在我的控制之下,所以我不能删除url中的引号。无论如何,基于@Pedro评论下面的选择器为我工作,

document.querySelector("*[style*='background-image: url("resources/images/test.jpg")']")

我在Selenium中编写脚本,因此我有必要根据其源来定位图像div。

最新更新