jquery,selector,包含其中一个文本

时间:2010-05-06 01:24:27

标签: jquery string

我需要帮助一件事:

这是我的jQuery想法:

        var text = "Some Text1, Some Text2, Some Text3";


        $("h3:contains('"+even one of  this string+"')").each(function() {
                $(this).append("<span>Some Text</span>");
        });

这是我的HTML

            <h3 class="test1">Some Text2</h3>

            <h3 class="test1">Some Text1</h3>

            <h3 class="test3">Another Text</h3>

OUTPUT中我想要的是什么:

             <h3 class="test1">
                 Some Text2
                <span>Some Text</span>
            </h3>

            <h3 class="test1">
                Some Text1
                <span>Some Text</span>
            </h3>

            <h3 class="test3">Another Text</h3>

谢谢!

5 个答案:

答案 0 :(得分:4)

快速jQuery

var text = "Some Text1, Some Text2, Some Text3";

$(document).ready(function(){
  $(text.split(", ")).each(function(i,v){
    $('h3:contains("'+ v +'")').append('<span>Some text</span>');
  })
})

快速demo

答案 1 :(得分:3)

var text = "Some Text1, Some Text2, Some Text3";

var aText = text.split(","); //splits into array on comma delimiter


for (var i = 0; i < aText.length; i++) {
    $("h3:contains('" + aText[i] + "')").each(function() {
        $(this).append("<span>Some Text</span>");
    });

}

这应该适合你(但不清楚你是否可以像这样突破/退出选择器字符串。让我知道它是否好。

答案 2 :(得分:3)

只需遍历标题并在$(this).text()上进行正则表达式匹配。如果你真的想要,你甚至可以把它变成一个自定义选择器:

$.extend($.expr[':'], {
  matches: function(node, index, args, stack) {
    var re = new RegExp(args[3]);
    return !!$(node).text().match(re);
  }
});

$(function() {
  $('h3:matches("Some Text[123]")').each(function() {
    $(this).append("<span>Some Text</span>");
  });
});

答案 3 :(得分:1)

你想:

$("h3:contains('Some Text1'), h3:contains('Some Text2'), h3:contains('Some Text3')").each(function() {
            $(this).append("<span>Some Text</span>");
    });

修改

在回应OP评论时,请注意,您可以执行以下操作:

var text = "Some Text1, Some Text2, Some Text3";

text.replace(/\s?([^,]+?)(,)|\s([^,]+?)$/g, "h3:contains('$1$3')$2");

生成元素列表。

然后你做:

var text = "Some Text1, Some Text2, Some Text3";

text.replace(/\s?([^,]+?)(,)|\s([^,]+?)$/g, "h3:contains('$1$3')$2");

$(text).each(function() {
            $(this).append("<span>Some Text</span>");
    });

这将用h3:contains('和')包围的术语本身替换所有逗号分隔的术语。它们将以与原始字符串相同的方式用逗号分隔。

答案 4 :(得分:0)

如果您提前知道字符串,那么简单的解决方案就是使用多个选择器,如下所示:

$("h3:contains('Some Text1'), h3:contains('Some Text2'), h3:contains('Some Text3')").each(function() {
    $(this).append("<span>Some Text</span>");
});