【发布时间】:2016-03-31 03:00:21
【问题描述】:
我正在尝试在 CSS 类选择器中实现this W3 字符转义描述。
我遇到了 abc\20 def 语法的问题,该语法在转义序列后放置一个空格,以确保 def 不会被误读为字符代码的一部分。
具体来说,尝试将 abc\XY def 放入 HTML 类属性或像 jQuery().addClass('abc\\20 def') 这样的命令(这里的 \\ 是 JS 字符串文字语法的一部分;字符串值本身有一个斜杠)都会给出元素两个类,abc\20 和 def。
这种语法是不是执行得不好,我应该坚持使用六位数的前导零形式吗?还是该文档仅引用 CSS 代码中的转义格式,而 HTML 属性/jQuery 参数需要某种不同形式的空格字符转义?
编辑:非常感谢大家的解释!
我现在明白这种语法只适用于 CSS 代码 - 而不是 HTML 属性或 Javascript 中设置的类名本身。
这也意味着指定为空格的字符不能出现在 CSS 类值中,并且没有任何转义机制允许添加它们。 (具体来说,如果我理解正确的话,CSS 选择器.abc\20 def 是有效的,并且选择了类为abc def 的元素,但是没有意义,因为没有任何元素可以拥有这个类。)
对于我的具体用例,涉及将任意值( 有空格)映射到有效的类名,我需要定义自己的转义方案。用- 或_ 替换空格(感谢Praveen)是一种可能性;如果映射需要是一对一的,则将它们替换为六位 Unicode 十六进制值(例如,"abc def" -> "abc\000020def" 是一种更强大的映射。
要记住的重要一点是,这种替换会影响类名本身——要在 CSS 中引用类 abc\000020def,反斜杠必须再次转义,以形成选择器 .abc\\000020def。
【问题讨论】:
-
确实,这是一个你正在陷入的纠结的邪恶混乱,介意我问你为什么需要(或想要??!)这样做?
-
这种语法是邪恶的。尝试使用
-或_。 -
您可以说“适当的方法是使用破折号”stackoverflow.com/questions/7560813/…。但是你不应该因为你不喜欢他的方式而发表粗鲁的评论并给予减号。没有错,因为你不知道怎么做。
-
抛开粗鲁的问题不谈,我不认为这就是 OP 甚至一开始所说的“这种语法”的意思。
标签: javascript html css-selectors