2009-11-25 7 views
3

J'essaie de supprimer le dernier caractère d'un ID div en utilisant jQuery. Actuellement, j'ai:Supprimer le dernier caractère de l'attribut ID

<div id="foo/"></div> 

Mais j'ai besoin:

<div id="foo"></div> 

Le caractère est toujours un / et est généré automatiquement (re: fâcheusement) par le CMS j'utilise. Ayant le / il y a des problèmes de liaison JavaScript que j'essaie de faire.

Comment corriger ce problème?

Répondre

13

Il est facile à l'aide du sélecteur attribute$= CSS3 qui signifie "se termine par" dans votre sélection jQuery:

$("div[id$=/]").each(function(){ 
    this.id = this.id.substr(0,this.id.length - 1); 
}); 

Edit: avec Adobe® Lab Browser, je l'ai testé ce code dans IE6, IE7, Firefox 2.0 et Firefox 3.0, Safari 3.0. J'ai également testé localement dans Safari 4.0 et Firefox 3.5. Dans tous les navigateurs, il a fonctionné correctement, et a supprimé le / à la fin de l'ID.

+0

+1 gentil, est-ce aussi dire,^est startswith et * signifie include? – YOU

+0

Oui, c'est le cas. Il peut gérer la plupart des sélecteurs CSS3, plus jQuery en ajoute un peu plus. –

+0

cool, j'ai trouvé ce http://www.w3.org/TR/css3-selectors/ aussi, je devrais essayer. – YOU

0

essayer:

$("div").each(function(){ 
    var i=$(this).attr("id"); 
    if(i){ 
     i = i.substr(0,i.length-1); 
     $(this).attr("id",i); 
    } 
}); 
+0

Il pourrait y avoir 100 divs qui sont bien sur la page. Il serait plus efficace d'utiliser un sélecteur jQuery plus détaillé pour que vous finissiez par regarder moins d'éléments. –

+0

C'était juste pour lui montrer un moyen de le faire. – TheVillageIdiot

4

Vous pouvez sélectionner tous les divs qui ont un attribut id, et vérifier si le caractère / est présent à la fin, puis retirez-le:

$('div[id]').each(function(){ 
    var id = $(this).attr('id'); 
    if (id.indexOf('/') == id.length-1) { 
     $(this).attr('id', id.slice(0, -1)); 
     // or $(this).attr('id', id.substring(0, id.length-1)); 
    } 
}); 
+0

Vous devriez vraiment utiliser 'id $ = /' pour faire correspondre seulement ces éléments. Et '$ (this) .attr ('id')' devrait être 'this.id'. Créer un nouvel objet jQuery et appeler une fonction 'attr' n'est pas la meilleure/la plus rapide pour obtenir/modifier l'identifiant. –

+0

@dcneiner, j'ai pensé à cela, mais puisque le caractère '/' n'est pas valide pour l'attribut ID, il pourrait avoir un comportement inattendu sur différents navigateurs en utilisant ce sélecteur ... http://is.gd/536C6 – CMS

+0

I se rendre compte qu'il est invalide, mais jQuery le traite comme n'importe quel autre attribut à ce moment-là, et le '/' n'a pas besoin d'être échappé dans mes tests, bien qu'il fonctionne toujours comme prévu. –

0

Cette pourrait le faire:

$('*').each(function(){ 
    $(this).attr('id', $(this).attr('id').replace(/\/$/, '')); 
}); 

Remplacer le * avec div ou tout sélecteur css pris en charge par jquery.

Questions connexes