dポイントプレゼントキャンペーン実施中!

例えば、次の文を実行したとします。

文字列.replace(/ alt=".+?"/ig," alt=\"\"");

すると、半角文字のみのalt属性は全て削除されますが、全角文字を含むalt属性は削除されません。
「.」がマルチバイト文字に対応していないためと思われますが、詳しくはわかりません。
原因&解決策を教えてください。

A 回答 (3件)

#2ですが


document.images[i].setAttribute('alt','');

<img … ALT="XX" …>
の場合、ALTとaltが一致しないので、うまく機能しないようです。
単純に
document.images[i].alt='';
とすると、HTMLでの大文字小文字は意識しないですみます

この回答への補足

「document.images[i].alt='';」これは使えますね。正規表現とは無関係ですが、試してみます。

肝心のinnerHTMLですが、原因がわかりました。
IEに限っては、innerHTMLに代入されるHTMLはソースそのままのHTMLではなく、IEが勝手に解釈したHTML(メニューから保存したソースに見られる汚いHTML)であり、その中で日本語のALTからはなぜかクォーテーションが外されてしまっていたために、サンプルの正規表現にはマッチしていなかったようです。
つまり正規表現自体は正常に動作していたわけで、こちらの早とちりでした。申し訳ありません。
色々アドバイスありがとうございました。

補足日時:2006/02/18 01:20
    • good
    • 0

>document.body.innerHTMLを使用していることが原因


経験的に、innerHTMLによるエレメントなどの動的置き換えは、どんな時でもうまくいくというものではないです。
もしやりたいことが、画像の代替テキストを空白にしたいというようなことであれば
window.onload=function(){
for(var i=0;i<document.images.length;i++){
document.images[i].setAttribute('alt','');
}
};
とすれば、画像の代替テキストを削除(空白に)できます。(バージョンにもよりますが、IE6,Firefoxは、大丈夫)
ALTアトリビュートは、img エレメント以外にも使用できる(例えばinputや、appletなど)ので意図していることと違っていたらすみません。
(全てのエレメントからALTがあるかどうかを調べて、あれば空白に置き換えるということもできると思いますが、おそらく、上記で充分ではないかと思います)
    • good
    • 0

IE6及び、Firefox1.5で試してみましたが、


半角文字のみ、全角文字のみ、混在、
どの場合でも大丈夫でした。
javascript1.3以降文字列はユニコードで扱うようになったので、javascriptt1.3以降では問題ないと思います。
おそらく、それ以前の古いブラウザを使用しているからだと思います。
環境がないので試せないですが、
replace(/ alt="[^"]+?"/i," alt=\"\"")
ではどうでしょうか?

この回答への補足

Firefoxでは上手くいきました。
IE6.0ではダメです。
色々試してみたところ、「文字列」にdocument.body.innerHTMLを使用していることが原因だったようです。普通の文字列は上手くいきました。
innerHTMLはユニコード扱いされないのでしょうか?

補足日時:2006/02/16 12:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!