1

故事到此为止......

你好 Stackoverflowers,我又来了!对,我现在正在学习 JQuery,我想构建一个“键入时搜索” AJAX/JSON 控件。所以离开 vie 进入 JSFiddle 构建一个骨架函数并在其上构建,边走边学。在过去的几天里,你帮助了我,所以谢谢你:

JQuery - 使用选择器:包含 - 奇怪的结果

JQuery - 迭代 JSON 响应

现在我只显示与输入匹配的选定列表项。

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

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");
    }


});

});​</p>

我所做的是放置一个console.log n2 始终为0,这是f12 日志以供证明:

证明

所以我的问题是:

  1. 我如何更正多重选择器以包含:包含所以我知道未来
  2. 我什至应该使用 :contains,还是应该以不同的方式处理它并使用.filter()?在发布之前,我正在研究这个问题,并找到了一个很好的堆栈答案,详细说明了这个问题的使用:

JQuery 包含选择器 - 多个文本项

4

1 回答 1

1

在您的情况下,您只需要组合两个选择器:li id starts withli contains. 每个选择器的相似部分是li,所以从li添加其他两个开始。

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

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

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

于 2012-06-25T19:51:37.760 回答