[class^=page-calendar-practices]
class 属性が「page-calendar-practices」で始まる要素のみを選択します。そのクラスの 1 つが「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/
詳細については、こちらを参照してください: jQuery 1.8 のカスタム フィルター セレクターで「一致」オブジェクトを取得する