2016-02-09 147 views
2

我需要選擇高於我的輸入並獲得其文本的標籤。最接近()沒有返回最接近我的輸入標籤

有時候是這樣的:

<div id="q1"> 
    <label class="question_label">Label q1</label> 
    <input type ="text"> 
</div> 

有時就像:

<div id="q2"> 
    <label class="question_label">Label q2</label> 
    <br> 
    <input type ="text"> 
</div> 

我已經追平prev()但有時輸入和標籤之間的<br>,所以上一個沒有按」總是工作。 我也試圖與closest()但它不會返回標籤:

$(':input').each(function() { 
    alert($(this).closest('label').text()); 
}); 

什麼是錯在我的代碼?

+0

您需要使用'prev()'或'兄弟姐妹()','最接近()'搜索的祖先不是它的兄弟姐妹 –

+1

使用''。「」div label:first-child「)。text()' –

回答

5

DO這樣的:(測試和驗證。)

$(':input').each(function() { 
    alert($(this).parent().find('label').text()); 
}); 
+0

不,它不工作,因爲有時prev()返回

+0

'prev()'將是'
' – Rayon

+0

@VincentTeyssier我已更新我的代碼。 –

2

closest尋找最近的父元素。

使用prev獲得前一個元素:

$(':input').each(function() { 
    alert($(this).prev('.question_label').text()); 
}); 

但是你必須<br />標記,以便您可以使用prevAll

$(':input').each(function() { 
 
     alert($(this).prevAll('.question_label').text()); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="q2"> 
 
    <label class="question_label">Label q2</label> 
 
    <br> 
 
    <input type ="text"> 
 
</div>

或者,您也可以使用siblings其選擇前一個(全部)或下一個(全部)到eleme NT。

+0

謝謝。但是如果我有一個接一個的問題,prevAll會返回所有問題的所有標籤,而不僅僅是這個問題的標籤? –

+0

是的,prevAll會返回所有匹配的元素。 –

+1

好吧,所以這不會在我的情況下工作,因爲我只想得到與輸入相關的特定標籤 –

1

使用

$(':input').each(function() { 
    alert($(this).parent().children("label").text()); 
}); 
1

closest()是不適合你的正確選擇,它搜索的祖先,而不是它的兄弟姐妹。因此,你可以使用prevAll()siblings()

console.log($(':input').prevAll('label').text()); 
 
console.log($(':input').siblings('label').text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="q2"> 
 
    <label class="question_label">Label q2</label> 
 
    <br> 
 
    <input type="text"> 
 
</div>

1
$(':text').each(function() { 
    alert($(this).siblings('label').text()); 
}); 

WORKING FIDDLE

2

這必將爲你的作品

$(':input').each(function(index,$text){ 
    alert($(this).parent().find('label.question_label').text()); 
}); 
3

其實,如果你修改你的HTML,那麼你可以得到正是你想做什麼:

<div id="q2"> 
    <label for="inputq2" class="question_label">Label q2</label> 
    <br> 
    <input type ="text" id="inputq2"> 
</div> 

上面我所要做的就是:

  1. 定義for的獨特價值在每個標籤中。
  2. 在輸入字段中定義id完全與響應它的標籤相同。

現在,這樣做:

$(':input').each(function() { 
    alert($('label[for="'+this.id+'"]').text()); 
}); 
+0

是的!這對我來說是一個很好的具體選擇:) –

+2

是的,只是想起並回答了另一種方式。 –

+1

對我來說更好的答案 – guradio

0
<!DOCTYPE html> 
<html> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 


<script> 
    $(document).ready(function() { 

     $(':input').each(function() { 
      alert($(this).closest('div#q2').find('.question_label').text()); 
     }); 
    }); 


</script> 



<body> 

    <div id="q2"> 
    <label class="question_label">Label q2</label> 
    <br> 
    <input type ="text"> 
</div> 
</body> 
</html>