我有一个关于 jQuery ID 选择器的问题 [关闭]

Posted

技术标签:

【中文标题】我有一个关于 jQuery ID 选择器的问题 [关闭]【英文标题】:I have a question on the part of jQuery ID Selector [closed] 【发布时间】:2019-09-02 20:43:03 【问题描述】:
$(“#id”).val() : No find
$(“input[id=‘id’]”).val() : OK

你知道以上两种情况的区别吗?你为什么要这么做?

【问题讨论】:

不清楚你在问什么 $("input#id").val() 怎么样?可能有多个元素的 idid 我们需要查看您的 html 猜猜你有另一个元素 id="id" 但它不是输入。 你 should not 对多个元素使用相同的 id(即使它们是不同的类型),如果你认为需要它,你可以使用 class 代替。 【参考方案1】:

要回答这个问题,我们需要了解 Jquery 选择器的工作原理。

$("#id") 内部使用document.getElementById();

$("input[id='id']") 内部使用document.getElementsByTagName() 来获取所有匹配的“元素标签”和带有 id 的过滤器。

这两种操作的主要区别在于 case 1 只返回匹配的对象,但 case 2 与 prevObj 或包含对象一起返回。

因此,从技术上讲,val() 的两种操作都应该返回相同的结果。

【讨论】:

但实际上第一个选择器并没有找到,第二个选择器只取到了值。【参考方案2】:

你在问为什么吗:

$(“#id”).val() // <--- This doesn't work,

// and

$(“input[id=‘id’]”).val()  // <--- ... and this does work?

假设您的标记看起来像这样:

<label for="id"> Input </label> <br />
<input id="id" type="text" value="test"/>

...如果是这种情况,那么以下应该可以工作(我已经包含了 vanilla JS 比较以供参考,这与 jQuery 在后台的工作方式非常接近)。

// The jQuery Way
const firstCase = $("#id").val() // "test"
const secondCase = $("input[id='id']").val() // "test"

// The Vanilla Way
const thirdCase = document.getElementById("id").value; // "test"
const fourthCase = document.querySelector("input[id='id']").value; // "test"

请提供您尝试与之交互的 HTML 标记,以便我们更好地了解您要解决的问题。

【讨论】:

&lt;input type=‘hidden’ id=‘modlId’ /&gt;

以上是关于我有一个关于 jQuery ID 选择器的问题 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何增加jquery选择器的值

减少用于加速交互的jquery选择器的数量

带有 ID 的 jQuery 选择器的性能

来自id选择器的jQuery数组对象

将jquery选择器的属性放入数组

css里关于定义class选择器的问题