<input id="001" aliases="test"/>
<input id="002" aliases="test"/>
<input id="003" aliases="test"/>
脚本中我如果用id取到对象,去写控件中的值,这样可以:
var test = $("input[id='001']");
test.val("test");
...
可是如果我按属性aliases去获取所有满足条件的控件,然后循环写入的话,我原本是这样写的:
var items = $("input[aliases='test']");
for(var i = 0; i < items.length; i++){
item[i].val("test");
}
这样会报错,指示item[i].val()不是一个方法,改成$(item[i]).val("test")就可以了。我想知道这是为什么?非数组时可以直接.val(),数组取出来的对象为什么不可以了呢?
学习了,这个我当初怎么没想到呢?我觉得是因为一个是jquery对象,一个是普通的dom对象。你加了个$()就成了jquery对象。就支持val了
如果只是普通的,可以用item[i].aliases = xx吧,你可以去试试。
因为items是jQuery对象,所以items[index]返回的是DOM对象;另一种写法是items.get(index);
想要返回jQuery对象应该是items.eq(index);
另外你的代码还有可以改进的地方。
比如知道DOM ID可以直接$("#ID"),直接从ID获取对象是最快的,请牢记;
jQuery对象没有必要另外写循环;如果一定要循环可以使用.each(),你的代码可以直接改写成这样:$("input[aliases='test']").val("test");
一、
var items = $("input[aliases='test']"); items是一个对象,并不是数组。他的属性有
0 input#001
1 input#002
2 input#003
items[0] 获取的只是input#001并不是一个对象,只是一个属性。
二、
$(items[0])这才是一个对象,他和var items的items是一样的。他的属性有
0 input#001
比如你这样做:
var newItem = $(items[0]);
$(newItem[0]).val("test");
同样是可以的。
你可以在firebug里看下他们的属性,你就很清楚了。
jquery 对象和js对象的区别 jquery对象并没有js对象的方法 或者属性
同样反过来也是
采用数组方式,会将Jquery对象转换为Dom对象。
最简单的方式还是选择器直接赋值。$('input[aliases="test"]').val('aaa');
var items = $("input[aliases='test']");这样获取的是数组对象,是dom的对象,如果要使用jquery的方法,需要转换成jquery的对象,怎么转换你已经知道了,所以直接那样写会报错,明白了吧
一个是DOM对象,一个是jQuery对象。
用$或者jQuery取出来的对象是jQuery,具有jQuery的方法val,因此可以调用
而DOM对象没有val方法
var test = $("input[id='001']"); 是jQuery对象,有val()函数
item[i]得到的是DOM对象,没有val()函数
以上正解
each(function(i,o){}); 这个方法中的o对象就是DOM对象.
items 是jQuery对象 而你items[i] 的时候就变成 Dom对象了 当然没有jquery对象的val方法咯
可以用items.each(function(){
// code
})
这样来遍历
这是一个DOM对象和Jquery对象的区别,当你在var items = $("input[aliases='test']");的时候,items变成DOM对象,DOM对象获取value的方法与Jquery不一样,DOM是用innerValue来获取的,你的下面代码应该变成:
var items = $("input[aliases='test']");
for(var i = 0; i < items.length; i++){
items[i].value;//赋值直接等于就可以了items[i].value=123
}