JQuery, селектор, содержит один из текста - PullRequest
3 голосов
/ 06 мая 2010

Мне нужна помощь по одной вещи:

это моя идея 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 ]

4 голосов
/ 06 мая 2010

Быстрый 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>');
  })
})

быстрый демо

3 голосов
/ 06 мая 2010

Просто переберите заголовки и выполните регулярное выражение в $ (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 голосов
/ 06 мая 2010
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>");
    });

}

Это должно сработать для вас (но неясно, можете ли вы взломать / выйти из строки селектора вот так. Дайте мне знать, если это хорошо.

1 голос
/ 06 мая 2010

Вы хотите:

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

EDIT

В ответ на комментарий 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: Содержит ('и') Они будут разделены запятыми так же, как и исходная строка.

0 голосов
/ 06 мая 2010

Простым решением, если вы знаете свои строки заранее, было бы использовать несколько селекторов следующим образом:

$("h3:contains('Some Text1'), h3:contains('Some Text2'), h3:contains('Some Text3')").each(function() {
    $(this).append("<span>Some Text</span>");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...