jQuery无法读取undefined的属性'setAttribute'

时间:2014-11-11 12:48:57

标签: javascript jquery

我在我的网站上实施了一个图片切换。它工作正常但我通过改变我的愿望打破了它。代码如下:

if (src) { $$('#' + id + ' a.product-image img').first().setAttribute("src", src);}

我已将其更改为:

if (src) { $$('#' + id + ' a.product-image img').first().setAttribute("src", src); 
           $$('#' + id + ' a.popup-image img').first().setAttribute("src", src); 
         }

我只是添加了一个需要更改的图像源。但是当我在我的网站上运行它时,我收到以下错误:

Uncaught TypeError: Cannot read property 'setAttribute' of undefined 

我已经检查了该元素是否存在,以及是否可以通过将以下代码添加到我的脚本中找到它:

if('#' + id + 'popup-image' == 0){
    console.log("fail");
}else{
    console.log("found");
}

每次都会找到它。我已将代码更改为:

$$('#' + id + ' a.popup-image img').first().setAttribute("src", src); 

但后来我收到以下错误:

Uncaught TypeError: Cannot read property 'first' of null

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果要使用JavaScript setAttribute()函数,则必须通过引用其数组的第一项[0]来访问jQuery对象中的HTMLElement,如下所示:

 $('#' + id + ' a.product-image img')[0].setAttribute("src", src);

调用first()将返回一个jQuery对象;使用此方法,您必须使用 attr() ,因为jQuery中没有setAttribute()方法。

尝试:

 $('#' + id + ' a.product-image img').eq(0).attr("src", src);

或:

$('#' + id + ' a.product-image img:first').attr("src", src);

或者您可以使用带有索引参数的get(),并且传递0将返回第一个元素:

$('#' + id + ' a.product-image img').get(0).attr("src", src);

答案 1 :(得分:1)

要检查元素是否存在,您应该使用代码:

if($$('#' + id + 'popup-image').length > 0){
    console.log("found");
}else{
    console.log("fail");
}

设置属性

if (src) { $$('#' + id + ' a.product-image img').first().attr("src", src);
           $$('#' + id + ' a.popup-image img').first().attr("src", src); 
         }