查找“包含”内的多个值变量

时间:2016-03-02 19:47:44

标签: javascript jquery find

我的变量返回多个值,用逗号分隔,或者在JSON字符串化后用换行符返回。

示例:

return mail // email1@gmail.com,email2@gmail.com,email3@live.com;

在Stringify之后:

var mail =
  ["email1@gmail.com",
  "email2@gmail.com",
  "email3@live.com"]

通过这3封电子邮件,我有另一个在我的数据中使用find的变量,例如:

$("#dat").contents().find("td:contains('" + mail + "')" ).siblings("td:nth-child(3)").map(function() { return $(this).text(); }).get();

我的数据:

<table id="dat">
    <tr> <td>email3@live.com</td> <td>Name</td> <td>Project</td> </tr>
</table>

这适用于单个字符串变量(如果我仅将mail用于“email3@live.com”,忽略其他两封电子邮件)。如果我的变量有多个值,可以这样做吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您的mail变量是一个数组,您必须遍历每个条目:

var mail =
  ["email1@gmail.com",
      "email2@gmail.com",
      "email3@live.com"]

mail.forEach(function(m) {
    // now 'm' contains your email string
    var result = $("#dat").contents()
        .find("td:contains('" + m + "')" )
        .siblings("td:nth-child(3)")
        .map(function() { return $(this).text(); }).get();
    // do something with result
}

您可能还想引入一个变量来存储结果

答案 1 :(得分:1)

问题是CSS&#34;:contains()&#34; selector不提供与列表的匹配。你必须循环两个:你的td元素和列表中的电子邮件。 这已经在另一个答案中显示出来了。

但是我建议你不要使用CSS&#34;:contains()&#34;选择器,因为它已在CSS3规范中被删除,并可能导致额外的计算负载(因为只有jQuery不能使用浏览器实现):

var mail = ["email1@gmail.com",
            "email2@gmail.com",
            "email3@live.com" ]

$("#dat tr").each(function() {
    if($.inArray($(this).first().html(), mail) {
        $(this,':nth-child(3)').map(function() { return $(this).text(); }).get();
    }
 });