2017-03-14 51 views
1

問題:最近()jQuery中時不處於同一級別的工作

我想(點擊按鈕之後 - 這部分是OK)選擇一類.my-textarea最接近的元素,但使用prev()並不總是可能的,因爲代碼是動態的。你能幫忙嗎?

詳情:

我有這樣的HTML代碼:

<div class="row"> 
    <div class="label">Description:</div> 
    <textarea class="my-textarea" name="my-textarea" rows="8" cols="40"></textarea> 
    <button type="button" class="my-submit" name="my-submit">Save</button> 
</div> 

而我的JS代碼(在按鈕與階級 「我提交」 點擊事件)是:

var text = $(this).closest('.my-textarea').val();

但它不工作。我沒有定義。

如果我嘗試: -

var text = $(this).prev().val();

我會得到文本區域的文本,但正如我所說,我的代碼是動態的,元素的順序和數量會發生變化。所以,prev()是超出選項。

任何想法如何使closest()工作?

+0

你錯過了'.'在第一次調用,以顯示它的一個類名'$(本).closet( '我的-textarea的。')VAL();' – Toxide82

+1

嘗試$(本)。 parent()。find('textarea [name = my-textarea]')。val() –

+0

假設'this'是按鈕,試試'$(this).parent()。find('textarea')'。 –

回答

3

需要使用siblings(),而不是closest(): -

$('.my-submit').click(function(e){ 
 
    e.preventDefault(); 
 
    var text = $(this).siblings('textarea').val(); 
 
    console.log(text); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="row"> 
 
    <div class="label">Description:</div> 
 
    <textarea class="my-textarea" name="my-textarea" rows="8" cols="40"></textarea> 
 
    <button type="button" class="my-submit" name="my-submit">Save</button> 
 
</div>

+2

'.siblings()'可能會更一般。 –

+0

@FabianKlötzl你是對的。編輯, –

+1

謝謝,這工作。這比使用'.parent()。find('textarea')'更好嗎? –

3

你需要使用

closest類將向上遍歷DOM樹來尋找元素,而在這種情況下textarea是按鈕的兄弟姐妹參考它。

$('.my-submit').click(function(){ 
    var text = $(this).siblings('.my-textarea').val(); 
    alert(text) 
    }) 

DEMO

+0

@DarrenSweeney檢查DOM brk

+0

@ brk - 道歉,我站好了!應該學會閱讀 –

5

我總是選擇父母,比搜索帶班的孩子。這樣,你的元素幾乎可以放在父母的任何地方。

$(this).parent().find('.my-textarea').val(); 
+0

有趣的做法。對於jquery而言,它比時間效率/流程密集程度低於兄弟姐妹()? –

+1

@JohnDoeherskij未經測試,但如果您將來更改DOM,則不必更改此功能。 – Justinas