Find "contains" 中的多个值变量

Multiple values variable inside Find "contains"

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

示例:

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

字符串化后:

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>

这适用于单个字符串变量(如果我只对 "email3@live.com" 使用 mail,忽略其他两封电子邮件)。如果我的变量有多个值,是否可以这样做?

谢谢!

您的 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
}

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

问题是 CSS“:contains()”选择器不提供与列表的匹配。您必须同时循环:您的 td 元素和列表中的电子邮件。 这已经在另一个答案中显示了。

但是我建议您根本不要使用 CSS ":contains()" 选择器,因为它已在 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();
    }
 });