通过非转义数据属性选择元素

时间:2012-12-05 04:22:23

标签: javascript jquery string escaping

我没有详细说明为什么我这样做......(它应该编码为开头,但不是出于我无法控制的原因)

假设我有一些看起来像这样的HTML

<tr data-path="files/kissjake's files"">...</tr>所以实际数据路径为files/kissjake's files"

如何通过数据路径选择<tr>

我目前能做的最好的事情就是当我将变量带入JS并进行任何操作时,我对其进行URLEncode以便我总是使用编码版本。 jQuery似乎很聪明,可以正确地确定数据路径,所以我并不担心。

问题在于我需要从另一个位置的数据路径读取代码的一步,然后比较它们。

实际上选择此<tr>令我感到困惑。

这是我的coffeescript

oldPriority = $("tr[data-path='#{path}']").attr('data-priority')

如果我插入URLEncoded版本的路径,则它找不到TR。而且我无法对其进行URLDecode,因为jQuery会因为路径中存在多个“和”冲突而中断。

我需要一些方法来选择与特定数据属性匹配的任何<tr>,即使它未在html中编码以

开头

2 个答案:

答案 0 :(得分:0)

首先,你的意思是在那里增加"吗?你将不得不逃避它,因为它不是有效的HTML。

<tr data-path="files/kissjake's files&quot;">...</tr>

要选择它,您需要在选择器内转义。这是一个看起来如何的例子:

$("tr[data-path='files/kissjake\\'s files\"']")

说明:

\\'用于转义CSS选择器中的'。由于'位于其他单引号内,因此必须在CSS级别对其进行转义。有两个斜杠'\`的原因是我们必须转义一个斜杠,以便它进入选择器字符串。

更简单的示例:'John\\'s'生成字符串John\'s

\"用于转义包含在其他双引号内的双引号。这个是在JS级别(而不是CSS级别)上进行转义的,所以只使用了一个斜杠,因为我们不需要斜杠来实际存在于字符串内容中。

更简单的示例:'Hello \"World\"'生成字符串Hello "World"


更新

由于您无法控制HTML的输出方式,并且您注定要处理无效的HTML,这意味着应该忽略额外的双引号。所以你可以这样做:

$("tr[data-path='files/kissjake\\'s files']")

只需要处理单引号的\\'部分。额外的双引号应由浏览器的宽松HTML解析器处理。

答案 1 :(得分:0)

根据@Nathan Wall的回答,这将选择所有<tr>个标签,并带有data-path属性。

$("tr[data-path]");