2010-09-02 32 views
16

Tôi có đoạn code HTML sau:Làm thế nào để tìm thấy yếu tố gần gũi nhất với jQuery

<td> 
    <input type="text" size="40" value="" name="related_image" id="related_image"> 
    <input type="button" class="button addImage" value="Get image url"> 
</td> 
<td> 
    <input type="text" size="40" value="" name="alternative_image" id="alternative_image"> 
    <input type="button" class="button addImage" value="Get image url"> 
</td> 

Tôi cần phải tìm ra nút mà tôi nhấp vào, sau đó thêm một số văn bản vào trường văn bản đầu vào gần nhất.
Ví dụ: nếu tôi nhấp vào nút trong số <td> đầu tiên, thì tôi cần nhập một số văn bản vào trường văn bản related_image.

Tôi đã thử với jQuery followin, nhưng nó không làm việc: (. Tôi chỉ lấy tên đầu vào để thử nghiệm)

jQuery('.addImage').click(function() { 
    var tmp = jQuery(this).closest("input[type=text]").attr('name'); 
    alert(tmp); 
}); 

Tôi nghĩ rằng tôi có thể phải sử dụng find và/hoặc siblings. Nhưng tôi không hoàn toàn chắc chắn như thế nào.

Bất kỳ trợ giúp đánh giá cao.

EDIT

tôi chỉ quản lý để sử dụng mã này
addImageEvent = jQuery(this).prevAll("input[type=text]:first")

Đang sử dụng prevAll một sự lựa chọn xấu?

Trả lời

26

Thử:

var tmp = $(this).siblings(":text").attr("name"); 

closest() phương pháp bạn đang sử dụng tìm thấy tổ tiên gần nhất, đó không phải là những gì bạn muốn ở đây.

+1

aaaah - bằng cách nào đó tôi mặc dù anh chị em = trẻ em. Nhưng anh chị em ruột = anh/chị. Cảm ơn. Tôi thấy có nhiều giải pháp cho "vấn đề" này. – Steven

+1

nếu có nhiều anh chị em tồn tại, thì làm thế nào để tìm được người gần nhất? – Sudarshan

+0

nó hoạt động như một nét duyên dáng, cảm ơn :) tôi đã cố gắng "tiếp theo" và "gần nhất" trước khi anh chị em! : D – rikpg

5

.closest() tìm thấy một phụ huynh, trong trường hợp này bạn cần .siblings(), như thế này:

jQuery('.addImage').click(function() { 
    var tmp = jQuery(this).siblings("input[type=text]").attr('name'); 
    alert(tmp); 
}); 

Hoặc nếu định dạng là luôn luôn nhất quán như ví dụ của bạn, chỉ cần sử dụng .prev(), như thế này:

jQuery('.addImage').click(function() { 
    var tmp = jQuery(this).prev().attr('name'); 
    alert(tmp); 
}); 
+0

Yup. Như tôi đã nhận xét ở trên - Tôi trộn lẫn cha mẹ/con, suy nghĩ anh chị em = trẻ em. Thansk cho giải pháp :) – Steven

3

Đây là một thực hiện 'gần' nhằm vào con cháu thay vì cha mẹ:

$.fn.nearest = function(selector) { 
    var nearest, node = this, distance = 10000; 
    node.find(selector).each(function(){ 
     var n = $(this), 
      d = n.parentsUntil(node).size(); 
     if (d < distance) { 
      distance = d; 
      nearest = n; 
     } else if (d == distance) { 
      nearest.add(this); 
     } 
    }); 
    return nearest; 
}; 
Các vấn đề liên quan