2009-08-13 11 views
1

私は電子商取引サイトでアコーディオンメニューを使用しています。メニューは、製品ページまでオプション付きで開いたままです。そのページでは、ブレッドクラムを使用してメニュー内のテキストを一致させ、メニューをページの正しいカテゴリに開くためのクラスを適用しようとしています。ここで変数を使用して:contains - howへ

は私のコードです:

$(document).ready(function(){ 
var bctext = $('#ProductBreadcrumb ul li:last-child').prev('li').children().text(); 
$('ul#accordion a:contains(bctext)').parent().parent().addClass('special'); 

}); 

変数が正しいテキストを返し、私は:containsに一致する文字列(「トマトソース類」)を置けば、それは私がそれをしたいだけのように動作し、適用されますクラス。しかし、私はbctext変数を使用すると、それは動作しません。

私もa:contains($(bctext))を試しても機能しませんでした。それは私の構文ですか?

おかげ

+0

にだけで簡単に1を好ましいコードを読みやすくするために、コードを選択エディタでCode sampleをクリックします。 –

答えて

3

試してみてください。

$('ul#accordion a:contains(' + bctext + ')') 
+0

ありがとう、私はその1つを考えていませんでした:-) –

1

変更:

$('ul#accordion a:contains(bctext)').parent().parent().addClass('special'); 

へ:

$('ul#accordion a:contains(' + bctext + ')').parent().parent().addClass('special'); 

最初の方法、あなたはそれを持っていた道にはJavaScriptを語っていますcontainsとして 'bctext'という文字列を使用しますパラメータ。あなたが実際に望むのは、bctext変数に含まれる文字列です。したがって、引用符の外側でそれを使用し、セレクタ文字列を作成するために連結を使用する必要があります。

+0

私はそれが変数であったことを知っているだろう、引用符ではなかったと思ったので、私は混乱していた...まだ学習... –

0

この行は次のようになります。

$('ul#accordion a:contains(' + bctext + ')').parent().parent().addClass('special'); 
2

またTraversing/containsを使用することができます。

$('ul#accordion a').contains(bctext); 
+2

私はいつもこのように、もしできれば、クエリ内の文字列の連結を避けてください。それはより安全で明確で、きれいに見えます – cobbal

+2

'$ .fn.contains()'は1.2では非難され、1.3ではフィルタ式に置き換えられました。 http://docs.jquery.com/Release:jQuery_1.2#Removed_Functionalityを参照してください。 –

+1

@cobbal - 私は好奇心が強いですが、セレクタ文字列の連結と比較して、このメソッドの安全性は何ですか? –

0

これは、代わりに非推奨のフィルタを使用しています特殊文字保存バージョンであり、 にはメソッドが含まれています。

$('ul#accordion a').filter(function() { return $(this).text() == bctext; })

1
$('ul#accordion a').filter(':contains(' + bctext + ')' 

今、(クレセント新鮮でコメントとして)deprecated

$('ul#accordion a').contains(bctext); 

関連する問題