jq获取操作元素失败?

小鹏
  • 7

clipboard.png

clipboard.png

clipboard.png

我想实现在点击按钮的时候 判断每个Li下dt下class名为db1的元素的display是不是none 如果是 当前整个Li隐藏,报错了 应该怎么写 ?求路过前辈指点 ~!!!谢谢

回复
阅读 2.2k
11 个回答

jQ兼容获取原生DOM对象的快捷方法就是形如$('#uls li')[1]取数组元素的这种形式,你这样写了之后返回的是原生DOM对象,而原生DOM对象是没有.children()这个方法的。所以你需要把后边的数组元素引用改成.eq(1)的形式,亦即$('#uls li').eq(1),这样返回的是jQ对象,你才能正常的调用jQ方法。

黄小豆
  • 2
新手上路,请多包涵

可以试一下$("#uls li").eq(1)

$(function(){
    $('#btn').click(function(){

        for(var i = 0 ; i<$('#uls li').length ; i++){
            var s = $('#uls li').eq(i).find('.db1');
            if(s.css('display') == 'none'){
                $('#uls li').eq(i).css('display','none')
            }
        }
    })
})

那是因为$("#uls li")[i]把jq对象转成了dom对象,换成$("#uls li").eq(i)应该就可以了

你用的$('#uls li')[1]获取到的是原生js对象,不是jquery对象。
保存原因显而易见原生对象调用jquery方法当然会报错。
参考代码
`$('#btn').click(function(){

             $('.db1').each(function(i){
                 if($('.db1').eq(i).css('display')=='none'){
                     $('.db1').eq(i).parent().parent().hide();
                 }
             })
         })`
console.log($("#uls li")[1].children[0].children[1]);
$("#uls li")[1].children[0].children[1].style.color="red";

我又来了。[style="display:none"]这部分看上去好怪呀,如果能把这个东西改成class。估计会爽一点

$('#uls .dbl[style="display:none"]').parent('li').hide();

$(obj).eq(1)....这样就可以了

JS和JQ混写:

js后面用jq方法很简单 $(jsDOm对象)
jq对象后面使用js方法 $('tag').get(0)或者$('tag')[0]

JQ对象只能用JQ方法
原生的DOM对象,才能用原生的方法

$('#uls li')[1]相当于把jq对象转换成原生DOM对象了。$('#uls li').eq(1)返回的是jq对象,才能调用jq方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏