2010-11-23 7 views
0

Je ne suis pas sûr que cela soit encore possible, cela étant dit ... voici un exemple de HTML avec lequel je travaille. Je veux, avec jQuery, saisir le nom du produit et l'insérer en tant qu'ID sur la balise span associée avec la classe "support", en remplaçant les espaces par des underscores.Utilisez jquery pour écrire un ID basé sur du texte dans une balise span

<div><span class="title">Product1 Name</span> <span class="support"></span></div> 
<div><span class="title">Product1 Name</span> <span class="support"></span></div> 
<div><span class="title">Product1 Name</span> <span class="support"></span></div> 
<div><span class="title">Product1 Name</span> <span class="support"></span></div> 

Ci-dessous serait le HTML souhaité que jQuery modifierait. Est-ce possible?

<div><span class="title">Product1 Name</span> <span class="support" id="product1_name"></span> </div> 
<div><span class="title">Product2 Name</span> <span class="support" id="product2_name"></span> </div> 
<div><span class="title">Product3 Name</span> <span class="support" id="product3_name"></span> </div> 
<div><span class="title">Product4 Name</span> <span class="support" id="product4_name"></span></div> 
+0

Vouliez-vous dire pour votre « entrée » à enjambe avoir des noms de produits différents? Ils ont tous 'Product1 Name'. –

Répondre

4

Yup. Cependant

$('span.title').each(function() 
{ 
    var $this = $(this), 
     id = $this.text().toLowerCase().replace(/ /g, '_'); 
    $this.next().attr('id', id); 
}); 

Demo!

Cela pourrait très bien créer des éléments avec des ID en double,. Pas bon.

+0

Aww, vous m'avez battu ... – Blender

+0

Comment cela peut-il être modifié pour cibler la travée avec une classe de "support" dans la même balise div? J'ai omis de mentionner qu'il y aura d'autres balises span dans le mélange. –

+0

@Robert: change '$ this.next()' en $ this.siblings ('span.support') '. http://api.jquery.com/siblings –

0

quelque chose comme:

(".title").each(function() {$(this).next(".support").attr("id",$(this).html().replace(" ","_"));}); 

n'a pas vérifié, mais il devrait fonctionner, espère que je suis la parenthèse compte bien à la fin ...