1

我有一些代码片段可以“破解”一些我无法正常修复的模板代码。

<script>
jQuery( document ).ready(function() {
    jQuery(".avatar").each(function() {
        var text = jQuery(this).attr("src");
        text = text.replace("-64x64.jpg", ".jpg");
        text = text.replace("-80x80.jpg", ".jpg");
        text = text.replace("-32x32.jpg", ".jpg");
        text = text.replace("-28x28.jpg", ".jpg");
        text = text.replace("-16x16.jpg", ".jpg");
        text = text.replace("-128x128.jpg", ".jpg");
        jQuery(this).attr("src", text);
    });
});
</script>

在浏览器中触发此脚本后,我在控制台中收到以下错误:

TypeError: text is undefined
text = text.replace("-64x64.jpg", ".jpg");

绞尽脑汁却一无所获。尝试使用 var text; 尝试在脚本的开头定义它,并尝试使用不同的变量名,以防它与两者都没有做任何事情的东西发生冲突......

4

1 回答 1

7

这意味着至少有一个具有类的元素avatar没有src属性。如果有问题的元素根本没有该属性,则attr返回。undefined

if (text)您可以在 ( )中放置一个警卫。这是一个例子。另请注意,使用的理由为零jQuery(this).attr("src");只需使用this.src

jQuery( document ).ready(function() {
    jQuery(".avatar").each(function() {
        if (this.src) {
          this.src = this.src.replace("-64x64.jpg", ".jpg")
                             .replace("-80x80.jpg", ".jpg")
                             .replace("-32x32.jpg", ".jpg")
                             .replace("-28x28.jpg", ".jpg")
                             .replace("-16x16.jpg", ".jpg")
                             .replace("-128x128.jpg", ".jpg");
        }
    });
});

您还可以使用正则表达式使该代码更加健壮:

jQuery( document ).ready(function() {
    jQuery(".avatar").each(function() {
        if (this.src) {
          this.src = this.src.replace(/-(\d+x\d+)\.jpg$/, ".jpg");
        }
    });
});

这将替换-DIGITSxDIGITS.jpg.jpg,而不具体说明每种情况下的数字是什么。\d表示“任何数字”,+后面表示“一个或多个”。

于 2013-09-06T09:49:52.270 回答