首页新闻找找看学习计划

咨询个jQuery的问题

0
悬赏园豆:20 [待解决问题]

<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(),数组取出来的对象为什么不可以了呢?

Codererer的主页 Codererer | 初学一级 | 园豆:182
提问于:2013-10-28 17:44
< >
分享
所有回答(12)
0

学习了,这个我当初怎么没想到呢?我觉得是因为一个是jquery对象,一个是普通的dom对象。你加了个$()就成了jquery对象。就支持val了

 

如果只是普通的,可以用item[i].aliases = xx吧,你可以去试试。

angelshelter | 园豆:9676 (大侠五级) | 2013-10-28 17:55
0

因为items是jQuery对象,所以items[index]返回的是DOM对象;另一种写法是items.get(index);

想要返回jQuery对象应该是items.eq(index);

 

另外你的代码还有可以改进的地方。

比如知道DOM ID可以直接$("#ID"),直接从ID获取对象是最快的,请牢记;

jQuery对象没有必要另外写循环;如果一定要循环可以使用.each(),你的代码可以直接改写成这样:$("input[aliases='test']").val("test");

写代码的小2B | 园豆:4346 (老鸟四级) | 2013-10-28 18:03
0

一、

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里看下他们的属性,你就很清楚了。

|WinKi| | 园豆:669 (小虾三级) | 2013-10-28 18:18
0

jquery 对象和js对象的区别 jquery对象并没有js对象的方法 或者属性

同样反过来也是

s_p | 园豆:269 (菜鸟二级) | 2013-10-28 18:20
0
$('input[aliases="test"]').each(function(i,item){$(item).val('c');});
````` | 园豆:14268 (专家六级) | 2013-10-28 21:15
0

采用数组方式,会将Jquery对象转换为Dom对象。

最简单的方式还是选择器直接赋值。$('input[aliases="test"]').val('aaa');

幻天芒 | 园豆:36522 (高人七级) | 2013-10-29 00:35
0

var items = $("input[aliases='test']");这样获取的是数组对象,是dom的对象,如果要使用jquery的方法,需要转换成jquery的对象,怎么转换你已经知道了,所以直接那样写会报错,明白了吧

code先生-null | 园豆:307 (菜鸟二级) | 2013-10-29 09:39
0

一个是DOM对象,一个是jQuery对象。

用$或者jQuery取出来的对象是jQuery,具有jQuery的方法val,因此可以调用

而DOM对象没有val方法

文飞扬 | 园豆:228 (菜鸟二级) | 2013-10-30 09:13
0

var test = $("input[id='001']"); 是jQuery对象,有val()函数

item[i]得到的是DOM对象,没有val()函数

以上正解

谦爸 | 园豆:239 (菜鸟二级) | 2013-11-10 07:44
0

each(function(i,o){});   这个方法中的o对象就是DOM对象.

残留 | 园豆:132 (初学一级) | 2013-12-12 00:20
0

items  是jQuery对象 而你items[i] 的时候就变成 Dom对象了    当然没有jquery对象的val方法咯

可以用items.each(function(){

// code

})

这样来遍历

mushishi | 园豆:230 (菜鸟二级) | 2013-12-25 19:33
0

这是一个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
}

繁复 | 园豆:207 (菜鸟二级) | 2015-04-27 13:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册