1

TL;DR: Twitter.com のすべての「img.avatar」について、src 属性の「.png」を「_normal.png」に置き換えたいと思います。以下のコードとエラーを参照してください。

コンテキスト: JavaScript と jQuery を学習中です。だから、私は小さなスクリプトを書いて物事を自動化するのが好きです。

問題:私は Retina MacBook Pro を持っていますが、twitter.com の 48 ピクセルのアバターはひどく見えます (#firstworldproblem は知っていますが、我慢してください)。小さい 48px アバターの URL と大きいバージョンの違いは、前者は「_normal.png」で終わるのに対し、後者は単純に「.png」で終わることに気付きました。例:

48px thumbnail: 
https://blablabla.com/7f11851408ac5220e361a22f1583e0db_normal.png 

Large version: 
https://blablabla.com/7f11851408ac5220e361a22f1583e0db.png

そうは言っても、jQuery の知識を適用し、すべてのアバター画像の src 属性の末尾にある「_normal」を体系的に削除することを考えました。これは「avatar」クラスで識別できます。ポイントは何ですか?これが私が試したことです:

jQuery("img.avatar").each( function(){
    $(this).attr("src", $(this).attr("src").replace("_normal.png", ".png"))
});

そして、コンソールに表示されるエラーは次のとおりです。

TypeError: Cannot call method 'replace' of undefined

私は何を間違っていますか?$(this).attr("src")エラーについて私が理解していることから、なぜ未定義なのですか?

PS 私は比較的 Stack Exchange に慣れていないので、規約に違反している場合はお知らせください。

4

1 に答える 1

1

属性をimg持たない要素がいくつかあります。srcこれが問題の原因になります。次のように、属性を変更する前に条件を追加してみてください。

jQuery("img.avatar").each( function(){
    if($(this).attr('src'))
        $(this).attr("src", $(this).attr("src").replace("_normal.png", ".png"))
});
于 2012-11-29T16:45:18.727 に答える