-6

也许这次它会起作用让我们试试......

好吧,这是我的问题,

此代码当前有效:

$(".threadTitle").each(function() {
    var colorBackground = "#F7F2ED";
    if ($(this).html().indexOf("Abraham") != -1) {
        $(this).parent().parent().parent().parent().css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row1").css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row2").css("background", colorBackground);
    }
});

这是我正在尝试做但不起作用的事情:

var titles = ["Abraham"];
$(".threadTitle").each(function() {
    var colorBackground = "#F7F2ED";
    var realTitle = $(this).html();
    if (titles.indexOf(realTitle) > -1) {
        $(this).parent().parent().parent().parent().css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row1").css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row2").css("background", colorBackground);
    }
});

@Jason P 提供的解决方案

var realTitle = $.trim($(this).text());

for (var i = 0; i < titles.length; i++) {
    if (realTitle.indexOf(titles[i]) > -1) {
        $(this).parent().parent().parent().parent().css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row1").css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row2").css("background", colorBackground);
        break;
    }
}

我发现的解决方案

var wordsOrPhrases = ["Abraham", "how are you"];
$(".threadTitle").each(function() {
    var realTitle = $(this).text();
    var asdasdasd = wordsOrPhrases.filter(function(x) {
        return realTitle.indexOf(x) > -1;
    }).length > 0;
    if (asdasdasd) {
        $(this).css("background", "#F7F2ED");
    }
});

小提琴和速度测试

http://jsfiddle.net/aYc2d/

http://jsperf.com/testestringinsidearray

感谢所有帮助过我的人。

4

2 回答 2

0

首先,您可能想要$(this).text()而不是.html(),以防您有嵌套跨度或其他东西(尽管您不应该这样做)。

但这不应该导致您遇到的问题。您必须在两个示例之间的 html 中有所不同。

于 2013-08-12T17:16:21.223 回答
0

您的问题仍未得到很好的解释,但我想我有。

您在问为什么这会返回 true:

if($(this).html().indexOf("Title A") != -1) {
    //should get here
}

但这不会:

var titles = ["Title A"];
var realTitle = $(this).html();
if (titles.indexOf(realTitle) > -1) {
    //should get here
}

差异与string.indexOf()和之间的差异有关array.indexOf()

string.indexOf()在字符串中的任意位置搜索指定的文本。

array.indexOf()在数组中的任何位置搜索指定的对象(不必是字符串)。

编辑从您的图片中,我可以看到您的跨度包含很多空格。尝试更改为:

var realTitle = $.trim($(this).text());

编辑 2以回应您的评论:

在这种情况下,您需要迭代数组并对indexOf每个项目执行操作。我认为这就是你想要的:

var realTitle = $.trim($(this).text());

for (var i = 0; i < titles.length; i++) {
    if (realTitle.indexOf(titles[i]) > -1) {
        $(this).parent().parent().parent().parent().css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row1").css("background", colorBackground);
        $(this).parent().parent().parent().parent().find(".row2").css("background", colorBackground);
        break;
    }
}
于 2013-08-12T17:26:08.760 回答