在数组中找到一段字符串,如果我能找到它就做点什么

时间:2013-08-12 17:01:17

标签: javascript jquery html

这次可能会有效让我们试试......

好吧,这是我的问题,

此代码目前有效:

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

小提琴&amp;速度测试

http://jsfiddle.net/aYc2d/

http://jsperf.com/testestringinsidearray

感谢所有帮助过我的人。

2 个答案:

答案 0 :(得分:0)

首先,您可能需要$(this).text()而不是.html(),以防您有嵌套跨度或其他内容(尽管您不应该)。

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

答案 1 :(得分: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;
    }
}