2016-09-13 52 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