Modification de L'ID d'un élément avec jQuery
J'ai besoin de changer L'ID d'un élément en utilisant jQuery.
Apparemment, ceux-ci ne fonctionnent pas:
jQuery(this).prev("li").attr("id")="newid"
jQuery(this).prev("li")="newid"
J'ai découvert que je peux y arriver avec le code suivant:
jQuery(this).prev("li")show(function() {
this.id="newid";
});
Mais cela ne me semble pas juste. Il doit y avoir un meilleur moyen, non? En outre, dans le cas où il n'y en a pas, quelle autre méthode puis-je utiliser à la place de show/hide ou d'autres effets? Évidemment, je ne veux pas afficher / masquer ou affecter l'élément à chaque fois, juste pour changer son ID.
(Oui, je suis un jQuery novice.)
Modifier
Je ne peux pas utiliser de classes dans ce cas, je dois utiliser des ID.
9 réponses
Votre syntaxe est incorrecte, vous devez passer la valeur comme deuxième paramètre:
jQuery(this).prev("li").attr("id","newId");
Une OPTION préférée à {[1] } est d'utiliser .prop
comme ceci:
$(this).prev('li').prop('id', 'newId');
.attr
récupère l'attribut de l'élément alors que .prop
récupère la propriété référencée par l'attribut (c'est-à-dire ce que vous avez réellement l'intention de modifier)
Ce que vous voulez dire est:
jQuery(this).prev("li").attr("id", "newID");
Qui définira L'ID sur le nouvel ID
J'ai fait quelque chose de similaire avec cette construction
$('li').each(function(){
if(this.id){
this.id = this.id+"something";
}
});
Je ne suis pas sûr de votre objectif, mais pourrait-il être préférable d'utiliser addClass à la place? Je veux dire QU'un ID d'objets à mon avis devrait être statique et spécifique à cet objet. Si vous essayez juste de le modifier à partir de l'affichage sur la page ou quelque chose comme ça je mettrais ces détails dans une classe, puis l'ajouter à l'objet plutôt que d'essayer de changer son ID. Encore une fois, je dis cela sans comprendre votre objectif de soulignement.
Si vous voulez changer l'ancien id alors maintenant afficher dans l'exemple
<label id="myOldId">Change id....</label>
Et chage en utilisant java-script
<script type="text/javascript" src="jQuery-1.7.2.js"></script>
<script>
$(document).ready(function() {
$('#myOldId').attr('id', 'newID');
});
</script>
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID');
La réponse D'Eran est bonne, mais j'ajouterais à cela. Vous devez surveiller toute interactivité qui n'est pas en ligne avec l'objet (c'est-à-dire si un événement onclick appelle une fonction, il le fera toujours), mais s'il y a une gestion des événements javascript ou jQuery attachée à cet ID, il sera fondamentalement abandonné:
$("#myId").on("click", function() {});
Si l'ID est maintenant changé en # myID123, la fonction ci-dessus ne fonctionnera plus correctement d'après mon expérience.
<script>
$(document).ready(function () {
$('select').attr("id", "newId"); //direct descendant of a
});
</script>
Cela pourrait faire tout usage. Il suffit d'ajouter avant votre balise de fermeture du corps et de ne pas ajouter Jquery.min.js