2016-09-13 89 views
0

我認爲使用最接近的上升的DOM和發現下降的DOM不是嗎?找不到我使用jquery的span標籤

我試圖找到一個跨度元素,當輸入有焦點。當聚焦正確但無法找到範圍時,我能夠獲得輸入的值。

在我的HTML

我有這樣的事情

   <div class="form-group"> 
        <label for="card-holder-name">Card Holder Name: <span>eafsdafasdf</span></label> 
        <input type="text" class="form-control card-holder-name" id="card-holder-name"> 
       </div> 

jQuery中

$(".card-holder-name").on('focusout', function(){ 
var inputValue = $(this).val(); 
console.log($(this).closest('label').find('span').text(); 

});

我嘗試使用console.log($(this).closest('label').text());只是找到標籤,但沒有運氣。

我在這裏做錯了什麼?

在此先感謝

回答

4

.closest()確實上去的DOM,但你想用它對付同級。

使用.prev()在這種情況下:

$(this).prev('label').find('span').text() 

jsFiddle example

+0

或兄弟姐妹('標籤')'如果標記可能會改變 – empiric

+0

如此接近將不適用於兄弟姐妹?此外,我嘗試不使用prev的情況下,如果有一些html更改,所以我聽說使用最接近會更好。但是現在看到'prev('label')'這是否意味着prev也會通過兄弟姐妹找到標籤? sryz我只熟悉'prev()'甚至不知道我們可以有輸入 – Tsuna

+1

它會的,但你需要上去,至少到div,然後退後。您的標籤與您的輸入無關,它緊挨着 - 兄弟姐妹。 'prev('label')'表示如果它是一個標籤,則選擇前一個元素。如果你想使用最接近而不是prev,使用'$(this).closest('div.form-group')。find('span')。text()' – j08691

1

你是正確的,$.closest()遍歷了DOM和$.find()穿越了下來。但是,您遇到的問題是label[for='card-holder-name']兄弟input.card-holder-name

對於您正在使用的特定HTML,您可以使用$(this).prev("label")$(this).parent().find("label")

+0

看起來像我只是有點太慢跟上@ j08691 – Bwolfing

+1

thx thx:D仍然幫助我...... thx很多 – Tsuna