我对jQuery ID Selector有疑问

时间:2019-04-12 06:20:19

标签: javascript jquery jquery-selectors selector

$(“#id”).val() : No find
$(“input[id=‘id’]”).val() : OK

您知道上述两种情况之间的区别吗?你为什么要这么做?

2 个答案:

答案 0 :(得分:2)

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

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

$("input[id='id']")在内部使用document.getElementsByTagName()来获取所有匹配的'Element tag'和具有ID的过滤器。

这两个操作之间的主要区别是情况1仅返回匹配的对象,而情况2与prevObj或包含对象一起返回。

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

答案 1 :(得分:0)

您在问为什么:

$(“#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"/>

...如果是这种情况,那么下面的方法应该可以工作(我已经包括了香草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标记,这样我们就可以更好地了解您要解决的问题。