0

下面是我使用 jQuery 获取输入元素的代码:

var txt = $(tableRow).find('input:text');
if (txt.value == null) {
  //TO DO code
}

这就是我使用纯 JavaScript 的方法

var txt = document.getElementById('txtAge');
if (txt.value == null) {
  //TO DO code
}

使用第一种方式,txt 的值是未定义的。但是对于第二种方式,值是输入元素内部的内容。现在更有趣的是,在 Mozilla Firebug 的右下角窗格中,如果我向下滚动到 txt 的“值”,我可以在那里看到它,两种方式。

我知道我可以简单地说$(txt).val(),但我也想了解为什么如果 jQuery 选择了一个元素,我无法访问它的值。jQuery 不只是一个 JavaScript 函数库吗?

4

4 回答 4

6

.value不是 jquery api 的一部分。您应该.val()改用:

var txt = $(tableRow).find('input:text');
if (txt.val() == "") {
  //TO DO code
}

dom 对象和 jquery dom 对象并不完全相同。实际上,您可以打开开发者工具(在 webkit 中)或 Firebug (Firefox) 来检查它们在里面是什么。Jquery 拥有更多信息(实际上,它包含它所代表的 dom 的一个实例)。所以,如果你想使用.value,你需要从 jquery 对象中调用“通用” dom 对象,然后使用.value.

于 2012-11-26T08:40:26.000 回答
2

jQuery 使用各种本地和非本地技术选择 DOM 元素,并将它们全部放在它自己的类似数组的实例中,该实例也将它们包装在自己的 API 中。jQuery 不会“扩展”原生 DOM 属性或方法,因此您需要以 DOM 节点为目标来执行此操作。

可以这样想:

var node = document.getElementById('txtAge'); // the DOM node
var txt = $('#txtAge'); // the same node wrapped in a jQuery object/API

由于 jQuery 对象拥有一个类似数组的 DOM 节点集合,因此您可以通过以下方式访问第一个元素:

txt[0] // same as node

但一般建议你使用.get()方法:

txt.get(0)

另一种更 jQuery 的方式来做你想做的事是使用 jQuery 集合迭代.each()

$(tableRow).find('input:text').each(function() {
    // "this" in the each callback is the DOM node
    if ( this.value == null ) {
        // Do something
    }
});
于 2012-11-26T08:43:11.693 回答
1
var x = $(tableRow).find('input:text');

这是一个 jquery 对象。

`x.value` 

jquery object 中没有属性值。所以它返回未定义。

x.val()是一种可用于获取元素值的方法。

于 2012-11-26T08:44:04.837 回答
1

.find()将返回一个类似 arry 的对象。如果您确定只有一个元素与您的查询匹配,您可以这样做

var txt = $(tableRow).find('input:text')[0].value;

这不是很像 jQuery,可以这么说,更像是 jQuery 和 DOM 方法的不匹配,但它会得到你想要的。此外,由于您显示,作为 DOM 示例,var txt = document.getElementById('txtAge');这可以在 jQuery 中重写为

var txt = $('#txtAge')[0];

于 2012-11-26T08:49:15.100 回答