2010-05-06 6 views
3

je besoin d'une aide pour une chose:jquery, sélecteur, contient un du texte

ceci est mon idée jQuery:

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


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

Ceci est mon HTML

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

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

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

Ce que je veulent en 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> 

Merci!

+0

Nombre de texte peut être différent, de chaînes – AlexC

Répondre

4

rapide 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>'); 
    }) 
}) 

rapide demo

1

Vous voulez:

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

EDIT

En réponse au commentaire OP, note, vous pouvez effectuer les opérations suivantes:

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

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

Pour générer votre liste d'éléments.

Ensuite, vous faites:

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>"); 
    }); 

Cela remplacera tous les termes séparés par une virgule par le terme lui-même entouré de h3: contient (« et »). Ceux-ci seront séparés par des virgules de la même manière que la chaîne d'origine.

+0

il peut être centième de texte – AlexC

0

La solution simple si vous savez à l'avance vos cordes serait d'utiliser plusieurs sélecteurs comme ceci:

$("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>"); 
    }); 

} 

Cela devrait travailler pour vous (mais ne sait pas si vous pouvez casser in/out de la chaîne de sélection comme ça. Laissez-moi savoir s'il est bon.

3

Parcourez simplement les en-têtes et effectuez une correspondance regexp sur $ (this) .text(). Vous pouvez même faire cela dans un sélecteur personnalisé si vous voulez vraiment:

$.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>"); 
    }); 
}); 
Questions connexes