2.5 选择器中的一些注意事项

2.5 选择器中的一些注意事项

2.5.1 选择器中含有特殊符号的注意事项

1.选择器中含有“· ”、“#”、“(”或“]”等特殊字符

根据W3C的规定,属性值中是不能含有这些特殊字符的,但在实际项目中偶尔会遇到表达式中含有“#”和“.”等特殊字符,如果按照普通的方式去处理出来的话就会出错。解决此类错误的方法是使用转义符转义。

HTML代码如下:

1
2
<div id="id#b">bb</div>
<div id="id[1]">cc</div>

如果按照普通的方式来获取,例如:

1
2
$("#id#b").css("background","#bbffaa");
$("#id[1]").css("background","#bbffaa");

以上代码不能正确获取到元素,正确的写法如下:

1
2
$("#id\\#b").css("background", "#bbffaa"); //转义特殊字符“#”
$("#id\\[1\\]").css("background", "#FF6500"); //转义特殊字符“[]”

2.属性选择器的@符号问题

在jQuery升级版本过程中,jQuery在1.3.1版本中彻底放弃了1.1.0版本遗留下的@符号,假如你使用1.3.1以上的版本,那么你不需要在属性前添加@符号,比如:

1
$("div[@title='test']"];

正确的写法是去掉@符号,比如:

1
$("div[title='test']"];
注意:如果你的项目中已使用较早的jQuery代码和插件,若把jQuery升级到最新后,出现代码报错或不能运行,那么很有可能是因为代码中使用了属性选择器的@符号而引起的。

2.5.2 选择器中含有空格的注意事项

选择器中的空格也是不容忽视的,多一个空格或少一个空格也许会得到截然不同的结果。

看下面这个例子,它的HTML代码如下:

1
2
3
4
5
6
7
8
<div class="test">
<div style="display:none;">aa</div>
<div style="display:none;">bb</div>
<div style="display:none;">cc</div>
<div class="test" style="display:none;">dd</div>
</div>
<div class="test" style="display:none;">ee</div>
<div class="test" style="display:none;">ff</div>

使用如下的jQuery选择器分别获取它们。

1
2
3
4
5
6
var $t_a = $('.test :hidden'); //带空格的JQuery选择器
var $t_b = $('.test:hidden'); //不带空格的JQuery选择器
var len_a = $t_a.length;
var len_b = $t_b.length;
alert("$('.test :hidden') = " + len_a); //输出 4
alert("$('.test:hidden') = " + len_b); //输出 3

之所以会出现不同的结果,是因为后代选择器与过滤选择器的不同。

1
var $t_a = $('.test :hidden'); //带空格的

以上代码是选取class为“test”的元素里面的隐藏元素。而代码:

1
var $t_b = $('.test:hidden'); //不带空格的

则是选取隐藏的class为“test”的元素。