2009-11-06 11 views
0

J'ai un menu qui est rempli par un serveur et je n'ai pas accès au serveur. Je suis donc limité à faire cela du côté client.Comment afficher X numéro de LI à partir d'une liste en utilisant javascript (pas de frameworks)?

À l'heure actuelle, il y a un menu déroulant sur la navigation avec 14 choix. Le client veut montrer seulement 3 d'entre eux. Ils n'utilisent pas de frameworks comme jquery ou mootools, donc je dois le faire à l'ancienne, mais je suis au mur.

<ul id='mylist'>
<li>option 1</li>
<li>option 2</li>
<li>option 3</li>
<li>option 4</li>
<li>etc</li>
</ul>

Quel est le code javascript pour ajouter à la liste des articles display:none 4-14?

(cela m'aide aussi à revenir aux fondamentaux de JS et à ne pas me fier aux frameworks).

Merci pour votre aide!

+0

En fait, ce que je voulais dire, c'est que "le client veut seulement montrer les 3 premiers". Pas de 3. – Loony2nz

Répondre

0

Vous pouvez faire un getElementById() pour obtenir le menu, puis getElementsByTagName() pour les LI qui retourneront un tableau (par exemple items []). Puis changez le style pour les éléments [3] en éléments [13].

Modifier

Je vous ai fait un petit code:

var menu = document.getElementById('mylist'); 
var LIs = menu.getElementsByTagName('li'); 
for(var i = 3; i< 14; i++) 
    LIs[i].style.display='none'; 
+0

Merci !! Mais avec mon calendrier pour y arriver, je suis en train de chercher la réponse et non une piste pour trouver la réponse. Si je n'étais pas sous le feu, je le ferais de manière "exploratoire". – Loony2nz

+0

@ Loony2nz: vous n'avez pas à explorer celui-ci. C'est le bon chemin. –

+0

Je vous ai fait un petit code: var menu = document.getElementById ('mylist'); var LIs = menu.getElementsByTagName ('li'); pour (var i = 3; i <14; i ++) LIs [i] .style.display = 'aucun'; –

0

Quelque chose comme ça? (Du haut de ma tête, désolé si elle est bâclée)

var children= document.getElementByid("mylist").childNodes; 
for (var i = 0; i < children.length; i++){ 
    if (i < 2) children[i].style.display = "none"; 
} 
+0

Je pense que vous voulez dire "si (i> 2)". aussi, je crois que element.childNodes retournera des noeuds de texte supplémentaires pour les espaces (s'il y en a). –

+0

OB a raison. c'est I> 2 et j'obtiens 29 éléments childnode, au lieu de 14. – Loony2nz

+0

heh ouais mon erreur – ayc

0

Vous devrez saisir les nœuds enfants de la liste et définissez la propriété style.display de chacun de ceux que votre client ne veut pas Voir à none. Cela ne semble pas trop compliqué, mais la collection de nœuds enfants peut contenir des éléments, des nœuds de texte, des commentaires, etc. Vous devrez donc vérifier que le nœud est un élément avec tagName de "LI" avant le traitement. Voici un code qui devrait faire l'affaire.

for (var node = document.getElementById('mylist').firstChild; node != null; node = node.nextSibling) { 
    if (node.type === 1 && node.tagName.toUpperCase() === "LI") { 
     if (/* node is not one of the ones your client wants to see */) { 
     node.style.display = 'none'; 
     } 
    } 
}