2010-11-20 46 views
0

Je le code HTML suivant:jQuery obtenir la valeur de l'enfant par ID

<div class="pane"> 
<h3> 
    <input type=hidden id="comm_id" value="{$comment.id}"> 
    <label id="comm_name" onclick="this.style.display='none';document.getElementById('comm_name_edit_view').style.display='';document.getElementById('comm_name_edit').value=this.innerHTML;">{$comment.writer_name}</label> 
    <div id="comm_name_edit_view" style="display:none;"> 
    <input type=text id="comm_name_edit" value="{$comment.writer_name}">&nbsp; 
    <button onclick="this.parentNode.style.display='none';document.getElementById('comm_name').innerHTML=getElementById('comm_name_edit').value;document.getElementById('comm_name').style.display='';">حفظ</button> 
    </div> 
</h3> 

<p> 
    <label id="comm_content" onclick="this.style.display='none';document.getElementById('comm_content_edit_view').style.display='';document.getElementById('comm_content_edit').value=this.innerHTML;">{$comment.comment}</label> 
    <div id="comm_content_edit_view" style="display:none;"> 
    <textarea type=text id="comm_content_edit">{$comment.comment}</textarea> 
    <button onclick="this.parentNode.style.display='none';document.getElementById('comm_content').innerHTML=getElementById('comm_content_edit').value;document.getElementById('comm_content').style.display='';">حفظ</button> 
    </div> 
</p> 
<p><a href="#" class="btn-delete">delete</a> | <a href="#" class="btn-approve">approve</a> | <a href="#" class="btn-spam">spam</a></p> 
</div> 

et jQuery suivante (je suis mauvais à jQuery)

jQuery(function(){ 
     $(".pane:even").addClass("alt"); 

     $(".pane .btn-delete").click(function(){ 

var x=SOMETHING;   
     $(this).parents(".pane").animate({ backgroundColor: "#fbc7c7" }, "fast") 
     .animate({ opacity: "hide" }, "slow") 
     return false; 
     }); ..... etc 

Dans le var x=SOMETHING;, je veux être en mesure pour obtenir la valeur de la boîte input avec l'ID de comm_id dans ce volet. Est-ce que c'est en quelque sorte possible?

Merci.

+1

Avez-vous plusieurs volets? Ce que cela ressemble ... et les attributs d'ID doivent être uniques sur un document. –

Répondre

4

Vous pouvez obtenir l'entrée à l'aide .closest() pour se rendre à l'<div class="pane"> puis .find() l'entrée à l'intérieur, comme celui-ci:

$(".pane .btn-delete").click(function(){ 
    var x = $(this).closest(".pane").find(".comm_id").val(); 
    //use x 
    //animations... 
}); 

Notez le changement de id-class être valide pour plusieurs volets, votre <input> devrait ressembler à ceci:

<input type="hidden" class="comm_id" value="{$comment.id}"> 
+0

Merci :), et comment obtenir la valeur innerHTML de la var z = $ (this) .closest (". Volet"). Find (".comm_content"). Quelque chose ?? –

+0

Yup, utilisez '.text()' ici: '$ (this) .closest (". Volet "). Find (" .comm_content "). Text();', changez de nouveau à 'class =" comm_content " 'être valide. –

+0

merci travaillé :) –

0
var x = $("#comm_id").val(); 

EDIT:

en fait, vous ne même pas besoin de le sélectionner par ID: vous pouvez simplement utiliser

var x = $("input[type=hidden]", $(this).parents(".pane")).val(); 

cela résoudrait le problème si vous avez plusieurs fragments de code comme ça.

+0

Ceci n'est pas une approche valide, puisque vous pouvez dire par '$ (". Pane: even ")' que ça se répète, donc un 'id' n'est pas approprié ici - pour votre édition, cela n'est pas non plus 'this' fait référence au bouton cliqué, pas au div ... donc il ne trouverait aucune entrée. –

+0

@Nick Craver de quelle façon '$ (". Pane: even ")' vous indique qu'il n'y a pas un seul '$ (". Volet .btn-delete ")'? Edited ma réponse de toute façon pour rendre compte de cela. – Razor

+2

Il indique qu'il y a plusieurs volets dans un style rayé (la classe '.alt'), de sorte que' id = "comm_id" 'n'est pas unique ... ce qui pose problème. Pour votre édition, le '' n'est pas * dans * l'ancre '.btn-delete', donc il ne trouvera aucun élément. –