2012-02-15 10 views
1

プラグインを変更しようとしていますlivefilter for jquery。 LIのタイトルタグとその内容を検索する必要があります。私はすでにそれを少し修正して(@ line#32)、マッチを隠さないようにします。代わりにそれらを太字にし、バックグラウンドをすべてのマッチに変更します。返された声明にこれを追加することjqueryプラグインのlivefilterをタイトルタグの検索に変更します。

 /** Case insensitive :contains jQuery pseudo selector */ 
    $.expr[":"].icontains = function(obj, index, meta, stack) { 
    return (obj.textContent || obj.innerText || jQuery(obj).text() || "").toLowerCase().indexOf(meta[3].toLowerCase()) >= 0; 
    }; 

: 私は次の行の変更を試みた

|| jQuery(obj).attr('title') 

をしかし、これは動作するようには思えない...

答えて

2

があるためより注意してくださいOR演算子||の場合、そのパーツの1つが真であるとすぐにテストは停止し、他の「パーツ」は全くテストされません(うまくいけばわかります)。

この種の書き込みは、通常、ブラウザの実装の違い、そのようなプロパティの有無などの理由から使用されます。

これは、次のコンテキストの場合である:textContentはIE < 9でサポートされていないので、obj.textContentが偽として評価され、その後innerTextのように評価されるであろう。最後の|| ""は、コードが壊れないように文字列が最終的に返されるようにします。

構文のこの種の別の使用は、このように、オブジェクトが定義されることを保証することである。

function foo(bar) { 
    var _bar = bar || {}; 
    // if "bar" is undefined, "|| {}" will be returned 
    // we can now surely work with "_bar" 
} 

さらにリーディング:


は何がしたいことは、コンテンツ title属性であるので、これを試してみてください。

(obj.textContent || obj.innerText || jQuery(obj).text() || "") + jQuery(obj).attr('title') 

DEMO

+0

おかげでそれを指摘しています...私はそれが声明に届かなかったことを認識していませんでした...それは今働いています... – jason

+0

私はちょっと混乱していたので少し答えを書き直しました。それが助けてくれてうれしい。 –

+0

もう一度、タイトルから.data( 'keywords')に切り替えることになりました。これは、キーワードの一部がタイトルタグに配置されていないためです。私は本当にhtml5のデータ属性を気に入っています。 – jason

2

あなたはjQueryの(OBJ).ATTR( 'タイトル')を挿入している場合内部"lowerCased"になる "()"は機能しません。

OR演算子は、いずれかのテストがTRUEを返すときに文を停止するので、最後の代わりに最初のテストとしてコードを入れる必要がありますが、:contains疑似セレクタは要素の内容あなたがやりたい

他の方法は、このような何かにあなたのセレクタを変更することです:

$("someSelector :contains(text), someSelector [title*=text]") 

は、覚えておいてくださいjQueryのコードは危険です変更が、プラグインのコードを変更するためではない

関連する問題