Javascript 为什么我从这个jquery中得到一个未定义的错误?

Javascript 为什么我从这个jquery中得到一个未定义的错误?,javascript,jquery,Javascript,Jquery,我正在努力确保总是有个人简历的图片。可以使用两个图像,也可以不使用(来自Xpath解析器提要)。如果在XML中找不到图像,我想加载一个默认占位符。控制台告诉我这行“UncaughtTypeError:无法读取未定义的属性'indexOf'。我尝试了很多方法来修复它,但没有任何运气。任何建议都将不胜感激 if ($('.a_class').attr('src').indexOf('jpg') == -1 && $('.b_class').attr('src').index

我正在努力确保总是有个人简历的图片。可以使用两个图像,也可以不使用(来自Xpath解析器提要)。如果在XML中找不到图像,我想加载一个默认占位符。控制台告诉我这行“UncaughtTypeError:无法读取未定义的属性'indexOf'。我尝试了很多方法来修复它,但没有任何运气。任何建议都将不胜感激

if ($('.a_class').attr('src').indexOf('jpg') == -1 
    && $('.b_class').attr('src').indexOf('jpg') == -1) {

    $('.a_class').attr('src', '/folder/default_img.JPG');
}

首先,多次运行同一个jQuery选择器代价高昂。根据我的经验,保存选择器会使Javascript明显更具响应性:

var aClass = $('.a_class');
var bClass = $('.b_class');
根据jQuery的文档,如果未设置属性,它可能返回undefined,因此您需要在if条件中检查一些内容。我还将
attr(attributeName)
的结果缓存在一个变量中:

var aClassSrc = aClass.attr('src');
var bClassSrc = aClass.attr('src');
这最终应该是可行的:

if ((typeof aClassSrc === "undefined" || aClassSrc.indexOf('jpg') == -1)
 && (typeof bClassSrc === "undefined" || bClassSrc.indexOf('jpg') == -1)) {
    aClass.attr('src', '/folder/default_img.JPG');
}

注意我们假设a_类和b_类存在于您正在搜索的DOM部分的某个地方,并且它们只存在一次。如果它们不存在,
attr(attributeName)
调用在没有警告的情况下不会执行任何操作。此外,如果存在多个a_类或b_类元素,则设置“src”标记的
attr
调用将为每个a_类元素设置它。确保你可以接受。

< P>我用JavaJAKE的答案作为基础,写出剩下的必要逻辑,希望能完全完成这项工作(见下文)。代码不会在控制台中调用任何错误。然而,我发现(在CMS中)有些东西是硬编码的,可以覆盖我添加到页面中的javascript,所以我还不知道这是否有效。除非您看到代码中有明显的错误,否则我想现在还没有必要做出响应。我正在研究是什么做了覆盖,并将更新后,我这样做。我要感谢大家迄今为止的帮助、评论和建议

<script>
var aClass = $('.a_class');
var bClass = $('.b_class');
var cId = $('#c_Id');
var aClassSrc = aClass.attr('src');
var bClassSrc = bClass.attr('src');
// set default if nothing is returned in XML
if ((typeof aClassSrc === "undefined" || aClassSrc.indexOf('jpg') == -1) && (typeof bClassSrc === "undefined" || bClassSrc.indexOf('jpg') == -1)) {
cId.attr('src', '/folder/imagefield_default_images/bio_default_photo.JPG');
}
// if two images are returned, use aClass and hide bClass
else if ((typeof aClassSrc === "undefined" || aClassSrc.indexOf('jpg') >= 0) && (typeof bClassSrc === "undefined" || bClassSrc.indexOf('jpg') == 0))
$('.b_class').hide();
// if aClass is not preset, use bClass and hide aClass's broken image URL icon
else if ((typeof aClassSrc === "undefined" || aClassSrc.indexOf('jpg') >= -1) && (typeof bClassSrc === "undefined" || bClassSrc.indexOf('jpg') == 0))
$('.dm_image').hide();
</script>

var aClass=$('.a_class');
var bClass=$('.b_类');
变量cId=$('c#u Id');
var aClassSrc=aClass.attr('src');
var bclassrc=bClass.attr('src');
//如果XML中未返回任何内容,则设置默认值
如果((类型aClassSrc==“未定义”| | aClassSrc.indexOf('jpg')==-1)和&(类型bClassSrc==“未定义”| | bClassSrc.indexOf('jpg')==-1)){
attr('src','/folder/imagefield_default_images/bio_default_photo.JPG');
}
//如果返回两个图像,请使用aClass和hide bClass
如果((类型aClassSrc==“未定义”| | aClassSrc.indexOf('jpg')>=0)和&(类型bClassSrc==“未定义”| | bClassSrc.indexOf('jpg')==0))
$('.b_类').hide();
//如果未预设aClass,请使用B类并隐藏aClass的断开图像URL图标
else if((typeof aClassSrc==“undefined”| | aClassSrc.indexOf('jpg')>=-1)和&(typeof bClassSrc==“undefined”| | bClassSrc.indexOf('jpg')==0))
$('.dm_image').hide();

您能否在片段或文档中重现该问题?或者至少在这里发布你的HTML。这意味着
.a_class
.b_class
不存在,或者如果存在,至少其中一个没有src属性。我是Jugana,你能为我们运行这两行吗<代码>控制台.log($('.a_class').length);console.log($('.b_class').length)输出是什么?如果你说“其中至少有一个没有源属性”,你的htmlI只是想澄清一下,你的意思是其中一个根本没有返回任何东西吗?如果是这样,情况就不应该是这样,但我可以检查一下。感谢原始逻辑对我来说似乎很好,OP声明“可能有两个图像或没有可用的图像(来自Xpath解析器提要)。如果在XML中找不到图像,我想加载一个默认占位符。”。我读这篇文章是因为“如果两者都没有图像,我想添加一个占位符”javaJake的答案看起来很好,我还没有尝试过,但我会的。关于笔记和评论,阅读笔记让我意识到有一种情况是b_类将不存在,我认为这将是一个问题。大多数时候,这两门课都会在那里,而且每门课只有一次,但很少有b_课不在那里的情况。我现在还意识到,我应该提到,当有多个图像时,会有一个偏好,如果两个图像都存在,我希望加载a_类中的图像,只有当a_类中没有图像时才加载b_类,最后才加载占位符。结果是javascript没有被覆盖,但代码不起作用。没有错误,但不工作。我认为这可能是CMS如何嵌套几个div的问题,每个div都有自己的类。我正在尝试不同的方法来指定包含其余div的最外层div,但还没有成功。