【问题标题】:JQuery : Finding ID attribute of an element in the unordered list without using .each()JQuery:在不使用 .each() 的情况下查找无序列表中元素的 ID 属性
【发布时间】:2014-04-04 21:29:32
【问题描述】:

我正在尝试在下面的代码中查找没有任何 li 元素的 ul 的 id:

if ( $("#myDiv ul.myClass > li").length < 1 ){
     alert($(this).attr("id"));
    }

我也看到了this article,但它使用了 .each() 函数。 我想在不使用任何循环的情况下实现这一点。这可能吗?

JSFiddle link

在上面的 JSFiddle 中,我无法获取空 UL 元素的 ID。 它正在警告它是未定义的。

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 你为什么不想使用.each??
  • @RobertRozas:没有具体原因。只是想在可能的情况下尝试单行而不是使用循环。

标签: jquery asp.net


【解决方案1】:

在您发布的 jsFiddle 中,您有一个错误的选择器开始。您希望 .myClass 出现在 UL 之前。

如果你解决了这个问题,那么你所要做的就是:

alert($("#myDiv > .myClass > ul:empty").prop('id'));

jsFiddle

选择器的更简单派生也可以使用:

  • #myDiv .myClass ul:empty - 没有立即继承
  • .myClass ul:empty - 任何 ul:empty 实例,它是 .myClass 的后代
  • #myDiv ul:empty - myClass 中的所有空 ul

【讨论】:

  • 其实我想选择class= "myClass"的element下的所有UL元素。因此,我编写了 ul.myClass 以便能够获取所有 UL 元素。感谢您的回复。
  • 根据您的示例,ul.myClass 将始终为空。我的选择器将选择位于.myClass 的元素下的所有UL 元素,这些元素位于#myDiv 下。在这些示例中,第二个是您描述的最接近的示例,如果您想直接在下面添加&gt;,只需在其间添加。
  • jsFiddle 工作正常,但我的应用程序使用 jquery 1.4.2,我仍然无法在其中找到 id。当我使用 .attr("id") 时,它显示未定义。你能帮忙吗?
【解决方案2】:

您可以使用:empty 选择器进行检查:

 alert($("#myDiv ul:empty").attr("id"));

但如果不止一个,这将只返回第一个匹配的 ID。

编辑:您的 HTML 在 jsFiddle 中无效。 LI 不能是 DIV 的直接子代。

【讨论】:

  • 是的,你是对的。我刚刚创建了示例小提琴,没​​有注意到 LI 不能是 DIV 的直接子级。感谢您的回复。
  • jsFiddle 工作正常,但我的应用程序使用 jquery 1.4.2,我仍然无法在其中找到 id。当我使用 .attr("id") 时,它显示未定义。你能帮忙吗?
  • 即使使用 jq 1.4.2,代码也可以工作。所以你的问题来自其他地方。检查您的控制台。但是很奇怪您使用.prop() 接受了答案,jq 1.4.2 不支持它...
  • 小提琴工作正常。因此,我接受了解决方案。但是,我看到 .prop 在 jq 1.4.2 中不受支持。因此,我使用了您的 .attr 而不是 .prop。但不确定,为什么它在我的应用程序中不起作用
  • @MrudangVora 那么,它现在工作了吗?使用 jq 1.4.2 查看工作演示:jsfiddle.net/QJt6v/4
猜你喜欢
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2021-11-29
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多