11548 sujets
Arf, j'avais oublié un firstChild, c'est pour ça...
Mais pour mon truc, ça ne marche pas quand même
Je ne comprend pas pourquoi là...
avec les 2 versions que vous me donnez, j'obtient l'erreur :
Que je n'ai pas avec la version innerHTML
Mais pour mon truc, ça ne marche pas quand même

function starRate()
{
var myUl = document.getElementById('rate');
if (myUl) {
var lis = myUl.getElementsByTagName('li');
for (var i = 0; i < lis.length; ++i) {
lis[ i].firstChild.innerHTML = ''; // fonctionne
//lis[ i].firstChild.firstChild.nodeValue = ''; // ne fonctionne pas
//lis[ i].firstChild.firstChild.data = ''; // ne fonctionne pas
lis[ i].style.margin = '0';
var img = document.createElement('img');
img.setAttribute('src', 'img/ico-unrate.png');
img.setAttribute('alt', i+1);
img.setAttribute('title', 'Mettre '+(i+1)+' sur '+lis.length);
lis[ i].firstChild.appendChild(img);
img.onmouseover = function()
{
for (var j = 0; j < this.getAttribute('alt'); ++j) {
lis[j].firstChild.firstChild.setAttribute('src', 'img/ico-rate.png');
}
};
img.onmouseout = function()
{
for (var j = 0; j < this.getAttribute('alt'); ++j) {
lis[j].firstChild.firstChild.setAttribute('src', 'img/ico-unrate.png');
}
};
}
}
}
window.onload = function()
{
starRate();
};
<ul id="rate">
<li><a href="">1</a></li>
<li><a href="">2</a></li>
<li><a href="">3</a></li>
...
</ul>
avec les 2 versions que vous me donnez, j'obtient l'erreur :
a écrit :
lis[j].firstChild.firstChild.setAttribute is not a function
Que je n'ai pas avec la version innerHTML

QuentinC a écrit :
Le code avec nodeValue fonctionnera tant que l'élément ne contient pas de sous-éléments ... par contre dans ce dernier cas, ça se corse sérieusement : il faut supprimer tous les sous-éléemnts et ensuite seulement supprimer le texte.
Il n'y a que du texte là

Par la suite, je crée une balise <img /> mais au moment de la suppr, il n'y a que du texte.
Olivier a écrit :
Il n'y a que du texte là![]()
Par la suite, je crée une balise <img /> mais au moment de la suppr, il n'y a que du texte.
Bonjour, tu souhaites remplacer le contenu du lien de chaque item par une image ? Dans ce cas, c'est replaceChild qui convient:
...
for (var i = 0; i < lis.length; ++i) {
lis[ i].style.margin = 0;
var img = document.createElement('img');
img.setAttribute('src', 'img/ico-unrate.png');
img.setAttribute('alt', i+1);
img.setAttribute('title', 'Mettre '+(i+1)+' sur '+lis.length);
lis[ i].firstChild.replaceChild(img,lis[ i].firstChild.firstChild);
...
chmel a écrit :
Bonjour, tu souhaites remplacer le contenu du lien de chaque item par une image ? Dans ce cas, c'est replaceChild qui convient:
... for (var i = 0; i < lis.length; ++i) { lis[ i].style.margin = 0; var img = document.createElement('img'); img.setAttribute('src', 'img/ico-unrate.png'); img.setAttribute('alt', i+1); img.setAttribute('title', 'Mettre '+(i+1)+' sur '+lis.length); lis[ i].firstChild.replaceChild(img,lis[ i].firstChild.firstChild); ...
Ahh wé ! Je n'y pensait plus à celle-ci, je testerais.
Javatwister a écrit :
je veux dire que ceci:
lis[ i].firstChild.firstChild.nodeValue
ne doit poser aucun problème, si la liste est bien présentée comme tu le dis;
Oui, ça fonctionne en effet, cf mon post précédent.
La liste existe bel et bien puisque je teste :
var myUl = document.getElementById('rate');
if (myUl) {
Tiens, cet article pourrait être intéressant, non ?
Raphael a écrit :
Tiens, cet article pourrait être intéressant, non ?
Merki, je garde ça sous le coude
