2010-06-04 3 views
0

J'ai écrit une fonction javascript qui utilise le innerHtml d'un div nommé (qui se produit immédiatement après le script) pour chaque ligne en sortie. le problème est, si j'utilise $('divname'), il trouve toujours la première instance, pas le plus proche. Quel est le moyen le plus simple dans le prototype pour cibler le div "divname" le plus proche?ciblant le tag le plus proche d'une certaine classe plutôt que le premier dans le prototype

par exemple (note, j'utilise Grails, d'où les balises <g:...>):

<g:each ... > 
    <tr> 
    <td colspan = "4"> 
     <g:javascript> 
     ... 
     $('outputdiv').innerHTML = theoutput; 
     </g:javascript> 
     <div id='outputdiv' /> //target THIS instance, not the first! 
    </td> 
    </tr> 
</g:each> 

Répondre

1

EDIT: Je lis d'abord la question relative à jQuery, mais l'idée devrait être le même pour Prototype ou toute autre bibliothèque.

On dirait que c'est ce que vous voulez faire:

$('#outputdiv').html(theoutput); 

Comme ID doivent être uniques dans un document, #outputdiv serait le sélecteur que vous voulez. Si vous utilisez outputdiv pour plusieurs ID, vous n'utilisez pas de balisage valide et vous obtiendrez des résultats imprévisibles.

Si vous avez besoin d'un tas de sorties, vous devrez en faire un className CSS, et probablement faire quelque chose avec jQuery's closest() ou nextAll() ou prevAll(). Notez également que votre fonction va tenter de définir innerHTML d'un élément qui n'existe pas encore. Vous voudrez probablement l'exécuter surDOMReady ou inclure votre script après que l'élément soit fermé et "prêt" dans le DOM.

// Assuming theoutput is available in this context 
$(document).ready(function(){ $('#outputdiv').html(theoutput) }); 
+0

cool. pourrais-je renoncer à la chose "prête" si j'ai créé le div avant le JS? – pennstatephil

+0

Aussi, juste trouvé ceci: http://stackoverflow.com/questions/2366367/prototype-equivalent-for-jquery-closest-function – pennstatephil

+0

Oui, vous pourriez renoncer à "prêt" dans ce cas. Fondamentalement, vous devez vous assurer que votre élément fait partie du DOM avant d'essayer de l'interroger. Aussi, j'ai lu votre $ comme étant de jQuery, pas Prototype. Cet autre thread SO devrait vous donner ce dont vous avez besoin. – ajm