2013-03-15 167 views
1

我有以下的標記:如何使用jQuery找到最接近元素的屬性?

<div class="span6"> 
      <form> 
       <fieldset> 
        <label>Name:</label> 
        <input type="text" class="success field span6" placeholder="Name" name="name" id="name"> <i id="name" class="check"></i> 
        <label>Email:</label> 
        <input type="text" class="field span6" placeholder="Email" name="email" id="email" > <i id="email" class="check"></i> 
        <label>Message:</label> 
        <i id="message" class="check"></i><textarea class="field span9" rows="8" placeholder="Message" name="message" id="message"></textarea> 
        <label class="checkbox"> 
        </label> 
        <button type="submit" class="btn disabled">Send Message</button> 
       </fieldset> 
      </form> 
     </div> 
    </div> 

而下面的jQuery:

$('input,textarea').keyup(function(){ 
     console.log($(this).closest(".check").attr("id")); 
    }); 

我得到的返回值是不確定的。如果標籤位於輸入之前或之後(即,如果所有標籤都是在使用$()。next())之後,如何找到類「.check」元素的id屬性值?

回答

1

首先你的html不正確,記住屬性ID必須是唯一的。

然後,你可以去到父(即表單標籤),並找到你想要的孩子,像這樣:

$('input,textarea').keyup(function(){ 
    console.log($(this).parents("form").find(".check").attr("id")); 
}); 
2

使用next如果輸入和prev if textarea ....; 試試這個

var checkID=''; 
$('input,textarea').keyup(function(){ 
    if($(this).is("input")){ 
    checkID=$(this).next(".check").attr("id"); 
    }else{ 
    checkID=$(this).prev(".check").attr("id"); 
    } 
     console.log(checkID); 
}); 
0

試試這個

$('input,textarea').keyup(function(){ 
     console.log($(this).find().closest(".check").attr("id")); 
    }); 
3

嘗試

var check = $(this).next(".check"); 
if(!check.length){ 
    check = $(this).prev(".check"); 
} 
console.log(check .attr("id")); 

演示:Fiddle

0

您正在使用最接近()是錯誤的。最近提取最近的父代。最好的approuch會回到它的父母身上並帶走孩子。查找並首先在這種情況下工作

console.log($(this).parent().first(".check").attr("id"));