[class^=page-calendar-practices]
只会选择类属性以“page-calendar-practices”开头的元素;不是其中一个类以“page-calendar-practices”开头的元素。
所以它会选择一个像这样的元素:
<body class="page-calendar-practices-2012-05">
您可以使用*
选择器:
$('body[class*=page-calendar-practices]')
但这也会选择以下内容:
<body class="page some-page-calendar-practices">
或者,您可以使用以下简单检查进行过滤:
$('body').filter(function() {
return ~(' ' + this.className).indexOf(' page-calendar-practices');
}).find('#content-header h1#title');
这比简单的“包含”选择器更冗长,但更准确。
这是小提琴:http: //jsfiddle.net/DR9K4/
为方便起见,您可以将自己的过滤器添加到 jQuery 中,如下所示:
jQuery.expr[':']['class-starts'] = function(el, i, m) {
return ~(' ' + el.className).indexOf(' ' + m[3]);
};
然后在任何你想要的地方简单地使用它:
$('body:class-starts(page-calendar-practices)');
在这里查看它的实际操作:http: //jsfiddle.net/gEJeW/
更新:在 jQuery 1.8 中,Sizzle 引擎被完全重写。作为更新的一部分,表达式扩展架构也进行了重新设计,因此上述功能将不再起作用。
如果您使用的是 jQuery 1.8+,请使用以下命令:
$.expr[':']['class-starts'] = $.expr.createPseudo(function (arg) {
return function (el) {
return ~(' ' + el.className).indexOf(' ' + arg);
};
});
这是小提琴:http: //jsfiddle.net/gEJeW/2/
有关更多信息,请参阅此处:Getting the "match" object in a Custom Filter Selector in jQuery 1.8