我正在努力确保始终有一个带有个人生物的图像。可能有两个图像或没有可用的图像(来自Xpath Parser feed)。如果在XML中找不到图像,我想加载默认占位符。控制台告诉我这行“Uncaught TypeError:无法读取未定义的属性'indexOf'”。我已经尝试了很多东西来解决它,但没有运气。任何建议表示赞赏。
.navbar ul li a.active
{
background-image: url(your image url for the page you are on);
}
答案 0 :(得分:1)
首先,多次运行相同的jQuery选择器是很昂贵的。根据我的经验,保存选择器可以使Javascript更具响应性:
var aClass = $('.a_class');
var bClass = $('.b_class');
根据jQuery的attr(attributeName)文档,如果未设置该属性,它可以返回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_class和b_class存在于您正在搜索的DOM部分的某个位置,并且它们只存在一次。如果它们不存在,则attr(attributeName)
来电不会在没有警告的情况下做任何事情。此外,如果有多个a_class或b_class元素,则attr
调用会设置" src" tag将为每个a_class元素设置它。确保你没事。
答案 1 :(得分:0)
我使用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>