2

我有这个简单的js:

var innerText  = document.getElementById("TaskId").options[0].text;

我想知道如何将其转换为 jQuery:

var innerS = $("#TaskId");
var innerText = innerS.options[0].text;

这会引发错误:

innerS.options is undefined

编辑

根据一些辩论,我一起进行了快速速度测试:

js:

var startDat = Date.now();
for (var c = 0; c < 100000; c++) {
    var com = $("#TaskId").get(0);
}
var endDat = Date.now();
alert("jQ.get(0) took " + (endDat - startDat) + "ms");


var startD = Date.now();
for (var co = 0; co < 100000; co++) {
    var com = $("#TaskId")[0];
}
var endD = Date.now();
alert("jQ[0] took " + (endD - startD) + "ms");

var startDa = Date.now();
for (var comp = 0; comp < 100000; comp++) {
    var compa = document.getElementById("TaskId");
}
var endDa = Date.now();
alert("js took " + (endDa - startDa) + "ms");

结果:

jQ.get(0) took 1042ms
jQ[0] took 1057ms
js took 136ms
4

3 回答 3

4

一个 jQuery 对象包含一个 DOM 元素数组。如果你想直接访问 DOM 元素,有很多方法可以直接访问。例如,您可以通过以下方式直接获取第一个 DOM 元素:

var innerS = $("#TaskId").get(0);

现在innerS是实际的 DOM 元素,不再是 jQuery 对象。

要获得最快的执行时间,请使用:

var innerS = document.getElementById("TaskId");

jQuery 可以快速编写代码,但并不总是最快的执行时间,因为 jQuery 对象会带来一些开销(构造它们、排序 DOM 元素等)。

你可以像这样得到整个 DOM 数组:

var optionElements = $("option").get();

当然,使用 jQuery 对象的一个​​原因是它们有一组跨浏览器的方法,在某些情况下可以很容易地只使用它们的方法而不是直接的 DOM 方法。在您的特定情况下,您可以像这样获得 innerText:

var text = $("#TaskId").text();
于 2012-05-01T23:07:37.233 回答
3

jQuery 对象本质上只是一个 DOM 元素的包装器,因此为了访问 DOM 元素本身,您可以使用 .get(0) 或 [0]:

$('#TaskId').get(0).options[0].text;

// OR

$('#TaskId')[0].options[0].text;
于 2012-05-01T23:14:37.863 回答
2

两种可能的解决方案:

var innerText = innerS[0].options[0].text; 
// Are you sure about .text? I never used it.

或者

var innerText = $("#TaskId option:first").text();
于 2012-05-01T23:06:08.530 回答