修改jquery插件livefilter以搜索title标签

时间:2012-02-15 17:21:13

标签: jquery

我正在尝试修改插件livefilter for jquery。我需要它来搜索LI的标题标签及其内容。我已经稍微修改了它(@ line#32),因此它不会隐藏匹配,而是会加粗它们以及将背景更改为所有匹配。

我尝试修改以下几行:

     /** 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 个答案:

答案 0 :(得分:2)

请注意,因为OR运算符||,一旦其中一个部分成立,测试就会停止,其他“部分”将根本不会被测试(希望我很清楚)。

这种写作通常被使用,因为浏览器的实现之间存在差异,可能有或没有这些属性。

以下情况就是这种情况:IE< 9不支持textContent,因此obj.textContent将被评估为false,然后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

答案 1 :(得分:2)

如果你在“()”中插入jQuery(obj).attr('title'),它将是“lowerCased”,它将无效。

OR运算符在任何测试返回TRUE时停止句子,因此您需要将代码作为第一个测试而不是最后一个,但这将是一个错误,因为:contains伪选择器仅用于元素内容。

执行所需操作的其他方法是将选择器修改为:

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

请记住,改变jQuery代码是危险的,但修改插件代码不是