如何使用jQuery找到最接近元素的属性?

时间:2013-03-15 12:36:17

标签: jquery dom jquery-selectors tree-traversal

我有以下标记:

<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属性的值?< / p>

5 个答案:

答案 0 :(得分:3)

尝试

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

演示:Fiddle

答案 1 :(得分:2)

如果输入则使用next,如果是textarea ....则使用prev; 试试这个

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);
});

答案 2 :(得分:1)

首先你的html不正确,请记住属性ID必须是唯一的。

然后,您可以转到父级(即表单标签)并找到您想要的孩子,如下所示:

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

答案 3 :(得分:0)

试试这个

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

答案 4 :(得分:0)

您正在使用nearest()错误。最近取得最近的父母。最好的方法是回到它的父母并取回孩子。查找并首先在这种情况下都可以使用

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