2

无需详细说明我为什么要这样做...(应该首先对其进行编码,但这不是出于我无法控制的原因)

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

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

我该如何<tr>通过其数据路径进行选择?

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

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

实际上选择这个<tr>让我感到困惑。

这是我的咖啡脚本

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

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

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

4

2 回答 2

0

首先,你的意思是把多余的东西"放在那里吗?您将不得不逃避它,因为它不是有效的 HTML。

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

要选择它,您需要在选择器内转义。这是一个外观示例:

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

解释:

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

Simpler example: 'John\\'s' yields the string John\'s.

\" is used to escape the double quote which is contained inside the other double quotes. This one is being escaped on the JS level (not the CSS level), so only one slash is used because we don't need a slash to actually be inside the string contents.

Simpler example: 'Hello \"World\"' yields the string Hello "World".


Update

Since you don't have control over how the HTML is output, and you are doomed to deal with invalid HTML, that means the extra double quote should be ignored. So you can instead do:

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

Just the \\' part to deal with the single quote. The extra double quote should be handled by the browser's lenient HTML parser.

于 2012-12-05T04:34:26.503 回答
0

Building off of @Nathan Wall's answer, this will select all <tr> tags with a data-path attribute on them.

$("tr[data-path]");
于 2012-12-05T04:38:04.610 回答