2010-11-20 3 views
0

я следующий HTML:JQuery получить значение ребенка по 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> 

и следующий JQuery (я плохо 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 

В var x=SOMETHING;, я хочу, чтобы иметь возможность чтобы получить значение поля input с идентификатором comm_id в этой области. Как это возможно?

спасибо.

+1

У вас есть несколько панелей? Это то, на что это похоже ... и атрибуты идентификатора должны быть уникальными в документе. –

ответ

4

Вы можете получить вход с помощью .closest(), чтобы добраться до <div class="pane"> затем .find() вход внутрь, как это:

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

Обратите внимание на изменение id в class быть действительным в течение нескольких панелей, ваш <input> должен выглядят так:

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

Спасибо :), и как получить значение innerHTML var z = $ (this) .closest (".pane"). Find (". Comm_content"). –

+0

Yup, используйте '.text()' there: '$ (this) .closest (" .pane "). Find (". Comm_content "). Text();', снова измените его на 'class =" comm_content " 'будет действительным. –

+0

Спасибо, работал :) –

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

EDIT:

на самом деле, вы даже не нужно, чтобы выбрать его ID: вы могли бы просто использовать

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

это решит проблему, если у вас есть несколько фрагментов кода как это.

+0

Это недействительный подход, так как вы можете указать '$ (". Pane: even ")', что он повторяется, поэтому здесь 'id' здесь не подходит - для вашего редактирования это тоже недействительно, поскольку 'this' относится к нажатой кнопке, а не к div ... поэтому он не найдет ввода. –

+0

@Nick Craver, в каком виде '$ (". Pane: even ")' сообщает вам, что нет ни одной '$ (" .pane .btn-delete ")'? В любом случае, отредактировал мой ответ. – Razor

+2

Указывает на наличие нескольких панелей в полосатом стиле (класс '.alt'), так что' id = "comm_id" 'не является уникальным ... что является проблемой. Для вашего редактирования '' не является * внутри * якоря '.btn-delete', поэтому он не найдет никаких элементов. –

Смежные вопросы