带有jQuery选择器的变量赋值中的Javascript或运算符

带有jQuery选择器的变量赋值中的Javascript或运算符,jquery,Jquery,鉴于这个简单的ul: <ul class="dummy"> <li>One</li> <li>Two</li> <li>Three</li> </ul> 根据我对在变量赋值中使用|的了解,我希望应该选择第一个li,因为没有li.active(另请参阅) 相反,在控制台.log中,我得到了未定义的而不是One:似乎从未计算容器.children('li:first child') 我错在哪

鉴于这个简单的
ul

<ul class="dummy">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>
根据我对在变量赋值中使用
|
的了解,我希望应该选择第一个
li
,因为没有
li.active
(另请参阅)

相反,在
控制台.log中,我得到了
未定义的
而不是
One
:似乎从未计算
容器.children('li:first child')


我错在哪里?这是一个。。。非常感谢

As jQuery方法返回一个jQuery对象,该对象将始终是truthy;因此,您将得到
未定义的
。如果你只是想得到HTML,你可以使用

var active = container.children('li.active').html() || container.children('li:first-child').html();
无论您如何获取该元素,都要删除
|
,并使用
.length
属性检查元素是否存在

var active = container.children('li.active');
if(active.length == 0)
    active = container.children('li:first-child')
var容器=$('.dummy');
var active=container.children('li.active').html()| | container.children('li:first child').html()
console.log(活动)

  • 一个
  • 两个

以下值在JavaScript中被视为“false”

  • 假的
  • 空的
  • “”(空字符串)
  • 0
  • 未定义
|
操作符将处理这些情况。在您的例子中,
container.children('li.active')
没有返回任何上述值,它是jquery选择器对象。因此,在这种情况下,第二个选项将不会执行


请安慰这句话,你会得到一些澄清
console.log(container.children('li.active'))

有关AND或操作,请参见以下内容::尝试这样编写内联:
(container.children('li.active')| | container.closest('li')?true:false)
container.children('li.active')
永远不会为空/未定义,因为它始终是一个JQuery对象,它是否有任何元素是不同的。PuZi是正确的,考虑使用。见更新
var active = container.children('li.active');
if(active.length == 0)
    active = container.children('li:first-child')