我没有详细说明为什么我这样做......(它应该编码为开头,但不是出于我无法控制的原因)
假设我有一些看起来像这样的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中编码以
答案 0 :(得分:0)
首先,你的意思是在那里增加"
吗?你将不得不逃避它,因为它不是有效的HTML。
<tr data-path="files/kissjake's files"">...</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]");