如何将选择器与 JavaScript 标识符正确组合?

Posted

技术标签:

【中文标题】如何将选择器与 JavaScript 标识符正确组合?【英文标题】:How to properly combine selectors with JavaScript identifiers? 【发布时间】:2016-11-07 02:05:31 【问题描述】:

我在 javascript 中选择了一个 DOM 元素。

var myParentElement = document.getElementById('myParentId');

现在,假设我想使用 jQuery 选择第一个元素,它是该元素的子元素,是可见的、启用的输入元素,并且具有给定属性的特定值(在这里,我想检查元素的名称)。

$([name="myChildName"]).children(':input:enabled:visible:first'); // ?

上面的sn-p是不正确的,我该如何解决呢? (我懂一点 CSS,但不太懂 jQuery)。

附加要求:我仅限于 jQuery 1.7.2

编辑:抱歉,实际上比第一行稍微复杂一点,因为我有一个名字,而不是一个 ID。

无论如何,感谢您的建议,我找到了我正在寻找的解决方案: $("[name=' + myNameIdentifier +']").filter(":input:enabled:visible:first"); IIRC 第一对引号是必须的,不包括它们是一个明显的错误。

此外,我忽略了孩子、查找和过滤之间的区别,所以我的问题不清楚。我想选择具有给定名称的所有元素,然后对该选择应用过滤器(不关心孩子或后代)。

【问题讨论】:

【参考方案1】:

使用children selector(>)

$('#myParentId > [name="myChildName"]:input:enabled:visible:first')

【讨论】:

我没有想到这一点,尽管它是如此明显:(谢谢!:)【参考方案2】:

$.children() 返回一个元素的所有子元素,因此您的代码实际上试图在[name="myChildName"] 元素内部 找到:input:enabled:visible:first,而不仅仅是过滤它。你可能想要:

$('#myParentId').children(':first-child:enabled:visible')

【讨论】:

感谢您的解释,但是我不太明白,$([name="myChildName"]) 不应该给我一个元素列表,而不是一个元素吗? (afaik,名称与 id 不同,在文档中不需要是唯一的)。另外,关于您提出的代码,不是 .children jQuery 特定的吗? myParentElement 没有选择 jQuery 的方式,所以它是一个常规的 htmlElement。他们不允许使用 jQuery 的 .children(),是吗? 1. $([name="myChildName"]) 确实返回了一个列表。但是,.children() 并不意味着“列表的所有成员......”,它的意思是:“给定元素的子元素” 2. 你是对的,我刚刚修复了我的代码,以便它与 jquery 一起使用,而不是与常规 HTMLElement 对象一起使用。

以上是关于如何将选择器与 JavaScript 标识符正确组合?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多图像选择器与 Flutter Image Compress 一起使用?

jQuery选择器与JavaScript易出错知识点

将 JQuery 的日期选择器与引导程序一起使用

jQuery 选择器与事件

将原生 Google 帐户选择器与 B2C 结合使用

符号表链接器与地址