2010-09-02 96 views
16

我有以下的HTML代碼:如何找到最接近的元素與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> 

我要弄清楚我點擊該按鈕,然後添加一些文本到最近的輸入文本字段。
例如如果我點擊第一個<td>中的按鈕,那麼我需要在related_image文本字段中輸入一些文本。

我試圖與跟隨着的jQuery,但它不工作:(我只是取回用於測試的輸入名稱)

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

我想我可能需要使用find和/或siblings。但我不太確定。

任何幫助表示讚賞。

編輯

我好不容易纔使用此代碼
addImageEvent = jQuery(this).prevAll("input[type=text]:first")

是使用prevAll一個壞的選擇?

回答

26

Try:

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

The closest()你正在使用的方法找到最接近的祖先,這不是你想要的。

+1

aaaah - 不知何故,我雖然那個兄弟姐妹=孩子。但兄弟姐妹=兄弟/姐妹。謝謝。我發現這個「問題」有多種解決方案。 – Steven 2010-09-02 01:05:58

+1

如果有很多兄弟姐妹存在,那麼如何找到最近的一個呢? – Sudarshan 2013-05-10 09:33:52

+0

它就像一個魅力,謝謝:)我在兄弟姐妹之前嘗試「下一個」和「最接近」! :d – rikpg 2014-01-29 16:35:31

5

.closest()找到了父母,在這種情況下,你需要.siblings(),像這樣:

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

或者,如果格式總是喜歡你的榜樣一致的,只是用.prev(),像這樣:

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

是啊。正如我上面評論的 - 我混合父母/孩子,思考兄弟姐妹=孩子。 Thansk的解決方案:) – Steven 2010-09-02 01:07:23

3

這裏是一個「最近」的實施,旨在後代,而不是家長:

$.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; 
};