2010-04-12 7 views
1

J'essaie de sélectionner tous les éléments qui ont une classe, d'obtenir leur ID (s'ils en ont un) et d'ajouter des intervalles individuels à la fin de mon document en fonction de cette information. Ceci est aussi loin que j'ai réussi à obtenir:Jquery - Ajoute les éléments sélectionnés dans les travées

var element = $(".foo"), 
    element_id = element.attr("id"), 
    span_id = "for-" + element + "-id-" + element_id, 
    ; 

J'espère ajouter une période pour chaque élément recueilli. Voici quelques exemples du format span Je souhaite obtenir:

<span id="for-img-id-profile"></span> 
<span id="for-div-id-content"></span> 

Si possible, je voudrais également permettre des éléments sans pièce d'identité pour être formaté comme ceci:

<span id="for-h1"></span> 

j'apprécie vraiment l'aide car je suis très nouveau à jQuery et j'essaie d'apprendre.

+0

Permettez-moi de reformuler par « ajouter des portées individuelles à la fin de mon document » Je veux dire que je veux que la durée soit après une div aveC#content. – criley

+0

Voulez-vous dire les éléments qui ont * une classe * spécifique, ou les éléments qui ont * une classe *? –

Répondre

0

Cela fonctionne et est aussi rapide, car il vaut mieux insérer toutes les travées en une fois en un seul bloc.

//get .foo elements 
var eles = $('.foo').toArray(), spans = []; 
//create html-fragments for each found element 
//respecting if no id is found 
//no overhead in loop as no unneeded jQuery wrapping is used 
for(var i=0; i < eles.length; i++) { 
    var e = eles[i], 
     tmp = '<span id="for-'+e.tagName.toLowerCase(); 
    if(e.id) { 
     tmp += '-id-' + e.id; 
    } 
    tmp += '"/>'; 
    //collect html fragments in an array 
    spans.push(tmp); 
} 
//join the html-fragments with "no-space" and insert after div#content 
$("#content").after(spans.join("")); 

Vérifiez http://jsbin.com/etafe pour une démonstration

+0

Cela fonctionne exactement comme j'en avais besoin. Merci beaucoup. – criley

0

Quelque chose comme

$(".foo").each(function(index){ 
    var id = ""; 
    if($(this).attr("id") !== "") 
    { 
     id = "for-" + $(this).attr("id"); 
    } 
    else 
    { 
     id = "for-h" + index; 
    } 

    $("<span />").attr("id", id).after("#content"); 
}); 

Remarque

Vous devez être sûr que ids doit être unique dans le document, et pas deux éléments ont le même identifiant.

0

Je ne suis pas tout à fait certain précisément ce que you'le l'espoir d'accomplir, mais vous voulez quelque chose qui ressemble plus à ceci:

$('.foo').each(function() 
{ 
    var $this = $(this); 
    $('<span id="for-' + ($this.attr('id') || $this.get(0).tagName) + 
     '"></span>').appendTo($(document)); 
}); 
+0

Bien que cela ne fonctionne pas, cela semble être la bonne direction Pouvez-vous expliquer ce que fait ce bit (purement pour l'éducation): ($ this.attr ('id') || $ this.get (0) .tagName – criley

+0

Le || L'opérateur dans ce contexte dit essentiellement que si l'expression avant évalue à null, retourne l'expression après elle. Dans ce cas, je vérifie si l'élément a un identifiant; s'il ne renvoie pas le tagName à la place. Ne correspond pas exactement à votre exemple ci-dessus, mais cela devrait vous permettre d'aller dans la bonne direction. –

Questions connexes