JQuery - Combing Selectors包括:contains

时间:2012-06-25 19:18:09

标签: jquery jquery-selectors

到目前为止的故事......

Hello Stackoverflowers,我再来一次!是的,我现在正在学习JQuery,我想在你键入“ AJAX / JSON控件时构建一个 ”搜索。所以关闭进入JSFiddle以构建一个骨架函数并在其上构建,随时学习。你过去几天帮过我了所以谢谢你:

JQuery - Using Selector :contains - Weird Results

JQuery - Iterating JSON Response

现在我转到仅显示与输入匹配的所选列表项。

“所以现在你的问题是什么......”我在这里你呻吟! (是的rlemon我现在有我的电子书!):)

JQuery nOOb问题第3部分:多个选择器。

我一直在使用JQuery Multiple Selectors API指南,所以我理解如何包含多个选择器,但我的问题是我没有选择任何东西,即:contains 找不到任何东西。这是不正确的,我使用过JSLint并且它已正确解析而没有错误:

$("li[id^='live'] li:contains('" + this.value + "')").show();

我的完整JSFiddle代码在这里,但我也很容易包含它:

http://jsfiddle.net/garfbradaz/JYdTU/88/

$(document).ready(function() {
var $input = $("#livesearchinput"),
    filled = false;
$.ajaxSetup({
    cache: false
});
$input.keyup(function(key) {
    if (!filled) {
        filled = true;
        $.getJSON("/gh/get/response.json//garfbradaz/MvcLiveSearch/tree/master/JSFiddleAjaxReponses/", function(JSONData) {
            var $ul =
            $('<ul>').attr({
                id: "live-list"
            }).appendTo('div#livesearchesults');
            $.each(JSONData, function(i, item) {
                $.each(item, function(j, val) {
                    $('<li>').attr({
                        id: "live-" + val
                    }).append(val).appendTo($ul).hide();
                });
            });
        });
    }

    var n = 0;

    if (this.value !== "") {
        n = $("li:contains('" + this.value + "')").length;
        n2 = $("li[id^='live'] li:contains('" + this.value + "')").length;
        console.log("1. value of n2 equals " + n2 + " : " + this.value + "end");


    }
    else {
        n = 0;
    }

    if (n <= 0) {
        $('li[id ^= "live"]').hide("slow");
        console.log("1. value of n equals " + n + " : " + this.value + "end");
    }

    if (n > 0) {
        $("li[id^='live'] li:contains('" + this.value + "')").show();
        console.log("2. value of n equals " + n + " : " + this.value + "end");
    }


});

});

我做了什么是把 console.log n2总是0,这是证据的f12日志:

proof

所以我的问题是:

  1. 如何更正多重选择器以包含:包含,以便我知道将来
  2. 我是否应该使用:contains,或者我应该采用不同的方法并使用 .filter()?在发布之前,我正在研究这个问题,并找到了一个很好的堆栈答案,详细说明了这个问题:
  3. JQuery Contains Selector - Multiple Text Items

1 个答案:

答案 0 :(得分:1)

在您的情况下,您只需要合并两个选择器:li id starts withli contains。每个选择器的相似部分为li,因此请从li开始,然后添加其他两个。

$("li[id^='live']:contains('" + this.value + "')").length;

http://jsfiddle.net/JYdTU/89/

我只更新了一行以使控制台正确输出,你必须通过小提琴并更新其余部分。