处理CSSselect器中元素ID的冒号

JSF将input字段的ID设置为search_form:expression 。 我需要在该元素上指定一些样式,但冒号看起来像是浏览器的伪元素的开始,所以它被标记为无效并被忽略。 无论如何逃避冒号或什么?

 input#search_form:expression { ///... } 

反斜杠:

 input#search_form\:expression { ///...} 
  • 另请参见将命名空间与CSS一起使用 (MSDN)

在冒号之前使用反斜杠在IE的许多版本(尤其是6和7;可能还有其他版本)中不起作用。

解决方法是使用冒号的hex代码 – 这是\ 3A

例:

 input#search_form\3A expression { } 

这适用于所有浏览器:包括IE6 +(可能更早?),Firefox,Chrome,Opera等。它是CSS2标准的一部分。

本文将告诉你如何转义CSS中的任何字符。

现在,甚至有一个工具: http : //mothereff.in/css-escapes#0search%5fform%3Aexpression

TL; DR此问题的所有其他答案都不正确。 您需要同时转义下划线(以防止IE6在某些边缘情况下完全忽略该规则)以及select器在不同浏览器中正常工作的冒号字符。

从技术上讲,冒号字符可以作为\: ,但在IE <8中不起作用,所以你必须使用\3a

 #search\_form\3a expression {} 

你可以用一个反斜杠来转义它

 input#search_form\:expression { ///... } 

从CSS规范

4.1.3特征和案例

以下规则始终成立:

所有CSS样式表都是不区分大小写的,除了不受CSS控制的部分。 例如,HTML属性“id”和“class”,字体名称和URI的大小写敏感性不在本规范的范围之内。 请特别注意元素名称在HTML中不区分大小写,但在XML中区分大小写。 在CSS中,标识符(包括元素名称,类和select器中的ID)只能包含字符[a-z0-9]和ISO 10646字符U + 00A1及更高版本,连字符( – )和下划线(_) ; 他们不能以数字或连字符后跟数字开始。 标识符也可以包含转义字符和任何ISO 10646字符作为数字代码(参见下一项)。 例如,标识符“B&W?” 可以写成“B \ W \”。 或“B \ 26 W \ 3F”。 请注意,Unicode是按ISO 10646等同的代码(请参见[UNICODE]和[ISO10646])。

在CSS 2.1中,反斜杠()字符表示三种types的字符转义。 首先,在一个string中,一个反斜杠后跟一个换行符被忽略(即该string被认为不包含反斜线或换行符)。

其次,它取消了特殊CSS字符的含义。 任何字符(hex数字除外)都可以用反斜杠转义以消除其特殊含义。 例如,“\”是一个由双引号组成的string,样式表预处理器不能从样式表中删除这些反斜杠,因为这会改变样式表的含义。

第三,反斜杠转义允许作者参考他们不能轻易放入文档的字符。 在这种情况下,反斜杠后面最多有六个hex数字(0..9A..F),代表ISO 10646([ISO10646])字符,该数字不能为零。 (在CSS 2.1中未定义,如果样式表包含Unicode代码点为零的字符,会发生什么情况。)如果范围[0-9a-f]中的字符跟随hex数字,则需要进行数字的结尾明确。 有两种方法可以做到这一点:

与一个空格(或其他空格字符):“\ 26 B”(“&B”)。 在这种情况下,用户代理应将“CR / LF”对(U + 000D / U + 000A)视为单个空白字符。 通过提供正好6个hex数字:“\ 000026B”(“&B”)实际上,这两种方法可以结合使用。 hex转义后只有一个空格字符被忽略。 请注意,这意味着转义序列后的“真实”空间本身必须被转义或加倍。

如果数字超出Unicode允许的范围(例如,“\ 110000”高于当前Unicode允许的最大10FFFF),则UA可以用“replace字符”(U + FFFD)replace转义。 如果要显示字符,则UA应该显示一个可见的符号,如“缺less字符”字形(参见15.2,第5点)。

注意:在允许的情况下,反斜杠转义始终被认为是标识符或string的一部分(即,“\ 7B”不是标点符号,即使“{”是,并且“\ 32”类名称,即使“2”不是)。 标识符“te \ st”与“test”的标识符完全相同。

在JSF 2,0中,可以使用web.xml文件指定分隔符作为javax.faces.SEPARATOR_CHAR的init-param

读这个:

  • 有没有可能在JSF中更改元素ID分隔符?

我有同样的问题与冒号,我无法改变他们(无法访问输出冒号的代码),我想用jQuery的CSS3select器获取他们。

我把它放在这里,因为这可能对某人有帮助

input[id="something:something"]在jQueryselect器中工作正常,它也可以在样式表中工作(可能有浏览器问题)

我在一个ADF框架中工作,我经常不得不使用JQuery来select元素。 这种格式适合我。 这也适用于IE8。

 $('[id*="gantt1::majorAxis"]').css('border-top', 'solid 1px ' + mediumGray); 

我发现只有这个格式适用于IE7(也是Firefox),我使用JSF / Icefaces 1.8.2。

说form id = FFF,element id = EEE

 var jq = jQuery.noConflict();
 jq(document).ready(function(){
 jq(“[id = FFF:EEE]”)。someJQueryLibFunction({{jQuery的lib函数选项去这里})
 });