JavaScript obtenir de l'élément enfant
Pourquoi cela ne fonctionne pas dans firefox, j'essaie de sélectionner la catégorie, puis faire de la sous-catégorie visible.
<script type="text/javascript">
function show_sub(cat) {
var cat = document.getElementById("cat");
var sub = cat.getElementsByName("sub");
sub[0].style.display='inline';
}
</script>
-
<ul>
<li id="cat" onclick="show_sub(this)">
Top 1
<ul style="display:none" name="sub">
<li>Sub 1</li>
<li>Sub 2</li>
<li>Sub 3</li>
</ul>
</li>
<li>Top 2</li>
<li>Top 3</li>
<li>Top 4</li>
</ul>
MODIFIER la Réponse est:
<script type="text/javascript">
function show_sub(cat) {
cat.getElementsByTagName("ul")[0].style.display = (cat.getElementsByTagName("ul")[0].style.display == "none") ? "inline" : "none";
}
</script>
- Je voudrais envisager d'utiliser une classe
sub
au lieu de l'attribut de nom de, dans cette situation. Si vous souhaitez utiliser jQuery c'est aussi simple que$('#cat .sub').css('display', 'inline')
. - Vous ignorez la
cat
paramètre, pourquoi? - C'est javascript question je n'ai pas besoin de jquery. @gdoron ce que vous voulez dire que je ignorer
cat
? - Vous remplacez la valeur que vous obtenez dans
cat
. De toute façon, quand vous dites qu'il ne fonctionne pas sous FF, ça marche avec un autre navigateur? - Vous passer une variable dans la fonction, et puis ne pas utiliser cette variable. Ce qui en fait un peu redondant (sauf si vous avez juste simplifié de la démo).
- il ne fonctionne pas n'importe où donne-moi la version de travail s'il vous plaît.
Vous devez vous connecter pour publier un commentaire.
ULs n'ont pas un nom d'attribut, mais vous pouvez faire référence à l'ul par le nom de la balise.
Essayez de remplacer la ligne 3 dans votre script avec ceci:
cat.getElementsByTagName("ul")[0].style.display = (cat.getElementsByTagName("ul")[0].style.display == "none") ? "inline" : "none";
Je vous suggère de faire quelque chose de similaire à:
JS Fiddle démo.
Bien que le ci-dessus repose sur l'utilisation d'un
class
plutôt qu'unname
attribut égal àsub
.Pourquoi votre version d'origine "ne marche pas" (non, je dois ajouter, un instrument particulièrement utile pour la description du problème), tout ce que je peux suggérer, c'est que, dans le Chrome, la console JavaScript rapporté que:
Une approche pour travailler autour de l'ancienne-c'est à dire de la famille des limitations est d'utiliser une fonction personnalisée pour émuler
getElementsByClassName()
, quoique grossièrement:JS Fiddle démo.
element.getElementsByName
, seulementdocument.getElementsByName
.getElementsByClassName
son pas compatible avec IE 6 et 7cat.getElementsByTagName("ul")[0].style.display = (cat.getElementsByTagName("ul")[0].style.display == "none") ? "inline" : "none";
Essayez celui-ci:
et de les utiliser pour IE6 & 7