当前位置:嗨网首页>书籍在线阅读

41-解决方案

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.10.2 解决方案

如果搜索的元素具有非常特殊的性质,选择器表达式可能不是最好的工具。使用jQuery的DOM过滤方法( filter() ),可以根据函数中表达的任何条件选择元素。

jQuery中的过滤器方法允许传递一个字符串(也就是,选择器表达式)或者一个函数作为参数。如果传递的是一个函数,它的返回值将定义某个元素是否被选择。传递的函数将对当前选择集中的每个元素运行;每当函数返回假值时,对应的元素就从选择集中删除,每当返回真值时,对应的元素不受影响(即留在集合中)。

jQuery('*').filter(function(){
   return !!jQuery(this).css('backgroundImage');
});

上述代码选择所有具有背景图片的元素。

初始集合是所有元素(*);然后以一个函数为参数调用 filter() 方法。这个函数在讨论的元素指定了 backgroundImage 时返回真值。你看到的 !! 是JavaScript中将任何类型值转换为布尔表达方式的快速方法。被当作假值的包括空字符串、数值0、数值 undefined 、空类型,当然还有布尔值false。如果查询 backgroundImage 返回的是上述值,该函数将返回 false ,从而删除集合中所有没有背景图片的元素。刚刚讲解的大部分内容并不是jQuery特有的,只是JavaScript的基础知识。

实际上, !! 没有必要,因为jQuery将把返回值转换为布尔值,但是保留它仍是一个好主意;任何查看你的代码的人都能绝对肯定你的意图(有助于可读性)。

在传递给 filter() 的函数中,可以通过 this 关键字引用当前元素。将它包装在jQuery函数中就可以变成一个jQuery对象(这样就可以访问和执行jQuery方法):

this; // 常规的元素对象
jQuery(this); // jQuery对象

下面是其他一些激发你的想象力的过滤示例:

//选择所有宽度在100-200像素之间的DIV元素:
jQuery('div').filter(function(){
   var width = jQuery(this).width();
   return width > 100 && width < 200;
});
//选择所有带有常用图像文件扩展名的图像:
jQuery('img').filter(function(){
   return /\.(jpe?g|png|bmp|gif)(\?.+)?$/.test(this.src);
});
//选择所有具备10个或者20个子元素的元素:
jQuery('*').filter(function(){
   var children = jQuery(this).children().length;
   return children === 10 || children === 20;
});