7
votes

Prototype.js Obtenez du texte d'un élément

Je suis nouveau à Protéoype.js et je le teste un peu parce que j'ai entendu dire que c'était bon, mais je suis coincé assez vite. Aussi facile que ceci est avec JQuery, il semble être la fin du monde d'obtenir le texte dans un élément. J'ai essayé innerhtml de plusieurs manières, mais la seule chose que je peux obtenir est "indéfinie". XXX

Aucune de ces travaux. Le contenu est un div avec ID "Contenu" et .mnu_item est une balise d'ancrage avec la classe ".mnu_item". Je n'obtiens pas ce que le problème est, probablement quelque chose de stupide, mais ce serait génial si quelqu'un pourrait me diriger dans la bonne direction!

Edit: j'ai constaté que ce n'est pas le innerhtml qui ne 't fonctionne mais c'est le sélecteur de classe. La deuxième ligne du code ci-dessus fonctionne. Comment puis-je sélectionner un élément par sa classe dans la dernière version de prototype si ce n'est la bonne voie?


2 commentaires

utilisez jQuery et appelez simplement $ ('content'). HTML (); Pour récupérer HTML


Rhyme éducative: il est assez difficile de dire sans le HTML.


4 Réponses :


0
votes

$ ('content'). innerhtml devrait fonctionner. Vérifiez votre HTML, assurez-vous que l'ID est unique.


0 commentaires

7
votes

a le DOM chargé lorsque vous exécutez votre script? Si vous n'exécutez pas ce code dans une fenêtre .Onload code> ou en le plaçant à l'extrémité em> du corps, les éléments n'existent pas quand il s'exécute.

Essayez de placer votre script juste à l'intérieur de la fermeture corbil> code> tag. P> xxx pré>

aussi, votre première ligne sélectionne correctement, mais retournera un Tableau d'éléments, donc innerhtml code> sera non défini code>. P>

Pour itérer le tableau, vous pouvez le faire: P>

var values = $$('.mnu_item').map(function(val,i) {
    return val.innerHTML;
});


1 commentaires

Hey, merci! Je ne savais pas que c'était de retourner un tableau, comme je l'ai dit, un problème assez stupide.



1
votes

Assurez-vous que le DOM est chargé avant d'exécuter ces tests: xxx

la première ligne de code $$ (". Mne_item ') ne fonctionne pas Parce que $$ Rave un tableau de tous les éléments correspondant à la règle CSS. SO $$ ('. MNE_ITEM') donne un éventail de tous les éléments DOM qui a la classe mne_item . Vous pouvez demander au premier à l'aide de la méthode première ou itérer sur tous les éléments tels que ceci: xxx

si vous utilisez $ En JQuery, il utilise en fait un modèle similaire mais cache la construction de chaque construction. Il applique simplement la méthode chaînée à tous les éléments ou juste le premier.

la deuxième ligne de code $ ("contenu"). Innerhtml devrait fonctionner. $ est un raccourci pour DOCUMENT.GETTELEMENTBYID Donc, il devrait vous donner un nœud DOM. La raison pour laquelle cela ne fonctionne pas est qu'il n'y a pas de nœud où id = contenu, probablement parce que le DOM n'est pas encore chargé.

Pour plus d'informations sur les méthodes de prototype Regardez l'API: http://api.prototypeypejs.org/

Vérifiez également les méthodes DOM par défaut: http://quirksmode.org/dom/w3c_core.html


2 commentaires

Y a-t-il une autre différence en utilisant $ (document) .on ('DOM: chargé', fonction () {...}); par opposition à document.Observe ('DOM: chargé', fonction () {...}); Je suppose que non ... jamais vu Dom: chargé utilisé sur On () avant: /


Ils agissent la même chose, sur une méthode plus récente qui peut également gérer un argument de sélecteur (voir API)



0
votes

var texte = $$ ('étiquette [pour = "display_on_amazon"]'). Premier (). TextContent;

Le code ci-dessus a fonctionné pour moi.

Concernant, $$ ('. mnu_item'). innerhtml

Lorsque vous essayez d'extraire avec le sélecteur de classe, le prototype renvoie une matrice de plusieurs elements, à l'aide de [0] ou premier () système de méthode pointera sur le premier élément de cette matrice, après cela, vous pouvez utiliser innerhtml (pour obtenir HTML à l'intérieur de l'élément) ou TextContent (pour obtenir le contenu du texte de cet élément, méthode JavaScript natif)


0 commentaires