2010-05-06 2 views
3

мне нужна помощь для одной вещи:JQuery селектор, содержит один из текста

это моя 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> 

Я want in 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> 

Спасибо!

+0

Количество текста могут быть разные, струн – AlexC

ответ

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

Вы хотите:

$("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

может быть сотой текста – AlexC

0

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

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

} 

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

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>"); 
    }); 
}); 
Смежные вопросы