知識、知恵のカタマリ

[PR]コレがGoogleの検索ストーリー

お蔵入り

clip!clip!
Ads By Google

innerHTML.replaceがMSIEとFFとで違う挙動を示します


で、Lightbox Plusの実装実験を行っております。
Lightbox Plusの基本実装は問題無く出来ております。
さて、目下Prototype.is(1.4.0)を利用していますが、以下の構文では、Firefox1.5.0.9では機能しているのですが、MSIEでは、置換が出来ていない模様です。
文法ミスがあるのでしょうか?
var blog2007 = document.getElementsByClassName("blog",$("content"));
for(j=0;j<blog2007.length;j++){
// まずはtargetの削除
 with(blog2007[j])innerHTML=innerHTML.replace(/(\<a href=\"[^\"]*\.[jpg][pni][gf]\") target=\"\>/ig,"$1>");
 with(blog2007[j])innerHTML=innerHTML.replace(/(\<a href=\"[^\"]*\.[jpg][pni][gf]\")([^\>]*)(\><img src=\"[^\"]*\") alt=\" ([^\"]*)\" ([^\>]*)\>/ig,"$1 $2 rel='lightbox1' class='effectable'$3 alt='$4' $5>");
}

MSIE:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
FF:
Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9

PS: MSIE専用処理として、本スクリプトの直後で、
var aTags = blog2007[j].getElementsByTagName("a");
によって、aTags[i].~ に対する代入処理を行っております。これがルール違反なのかも・・・・う~む ^^;

2007-01-16 11:18の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。

回答

まだ回答がありません
Ads By Google

コメント(7)

2007-01-17 03:41:07

var aTags = blog2007[j].getElementsByTagName("a");
というのはアリなのですか?私は使ったことないのですが・・・。

正規表現は、「?」がついてなくて最長マッチになっている可能性はないでしょうか。

質問には関係ないですが、
\.[jpg][pni][gf]
は、
\.(jpg|gif|png)
の方がいいのではないでしょうか。まぁ、ppgとか他の組合せがマッチすることなんてないでしょうけどw

//毎度つぶやきレベルですいません。。。

2007-01-18 22:41:40

http://wiki.livedoor.jp/mmj_aos/tb.cgi/Lightbox%20...
のLivedoor Wikiで解説中なのですが、Lightbox Plus の実装を、Livedoor、Seesaa、FC2に行っています。
Firefoxでは問題無くreplaceするのですが、同じ構文が、どうやらMSIEだと、エラーにはならないものの、置換されていないようです。正規表現でマッチしていない模様です。

>>#1 アリなのですか?

document.getElementsByClassName("blog",$("content"))[0];
ではなくて、
document.getElementsByClassName("blog",$("content"));
なので、こうなりました。</div>でいちいち閉められてしまっている。ブログのINDEXだと、複数のコンテンツが表示される。コンテンツとコンテンツの間に、広告があったりします。
.or. の正規表現式の方が、まともですよね。改めます。(^^);

2007-01-19 23:36:40

>>#1 正規表現は、「?」がついてなくて最長マッチになっている可能性はないでしょうか。

UNIXのgrepに代表される正規表現からすると、「?」って、何?!って思っていました。
?って、「任意の1文字」のマッチングではなかったのでしょうか?
どこか、「?」に関する解説HPなるURLを知っておられる方はおられませんでしょうか?

2007-01-20 00:30:02

>>#3
量指定子の後ろにつける「?」の意味です。難しいものではないので説明しますと、

/a.*a/
は、"ababa"に対して、普通は最長マッチなので、
ababa
にマッチしますが、
/a.*?a/
とすると、最短マッチになって、
aba
にマッチします。Perl5由来だっけかな。。。でも、たぶん、原因はそれではない気がします。

target=\"\>
のところと、
alt\"=
の後に空白がちょっとだけ気になります。

ちなみに、#1の「アリ」はそういう意味ではなく、タグオブジェクトのメンバメソッドにgetElementsByTagNameがあるというのを知らなかっただけです。すいません。。。

2007-01-27 11:52:40

>>#4 量指定子の後ろにつける「?」の意味です。難しいものではないので説明します

毎度お世話になります。ご指導に感謝致します。

さて、FFで目的を達成し、MSIEでは目的を達成しない改訂後のスクリプトは:

with(blog2007[j])innerHTML=innerHTML.replace(/(\<a href=\"[^\"]*\.[jpg][pni][gf]\")([^\>]*)(\><img src=\"[^\"]*\")(.*)(alt=\" [^\"]*\")([^\>]*)\>/ig,"$1 $2 class='effectable'$3 $4 $5 $6>");

が最新replaceです。^^;
確かに文法ミスがありました。それでもFFで目的を達成したのは、文法ミス以外で機能していたのでしょう。面目ありません。

ただ気になるのは、エンジンが異なると正規表現が変わるとのご指摘でした。★オニキス☆さまのご指摘かと(^^)
http://knowledge.livedoor.com/18489

2007-01-27 11:53:06

>>#4 後に空白がちょっとだけ気になり
IMGタグのALT属性の先頭文字が半角空白の場合に、Aタグに

class='effectable'
を挿入したいと言う置換です。説明不足で申し訳ない次第です。

- Ujiki.oO -

2007-02-15 22:36:00

結局、現在利用中の最新Firefoxが、
http://pics.livedoor.com/u/mmj_aos/2279489
JavaScriptのreplace()で、オプション「 g 」を指定しても、仕様の通りに複数のマッチング置換をせず、1つの置換しか出来ない点を確認しました。
 直前にreplaceを追加し、例えば

<a を \n<a に置換する
ことで、正常に機能するようになりました。不恰好ですね。
これでMSIE系で完成した機能の仕様を、Firefoxでも同等に機能を果たせるようになりました。ありがとうございました。
http://wiki.livedoor.jp/mmj_aos/tb.cgi/%A4%C1%A4%E...

- Ujiki.oO -

PS: ★オニキス☆さま、是非アンサー願います。(*^^*)

トラックバック(5)

トラックバックURL:

Lightbox Plus をブログで使ってみる

文字だけでも素晴らしいですけど、やっぱり軽快な画像表現で訴求効果を高めますか。画像をクリックして新しいウィンドーで生成したり、画像だけを表示すると言う落胆も無くなります。訪問者が画像をクリックすることに幸せを感じて、もっとみんなが喜ぶかも (*^^*)/ ...

Using only Java Script for ALBUM - livedoor Wiki(ウィキ) at 2007年01月18日 22:32:16

Lightbox Plus をブログで使ってみる

文字だけでも素晴らしいですけど、やっぱり軽快な画像表現で訴求効果を高めますか。画像をクリックして新しいウィンドーで生成したり、画像だけを表示すると言う落胆も無くなります。訪問者が画像をクリックすることに幸せを感じて、もっとみんなが喜ぶかも (*^^*)/~

Using only Java Script for ALBUM - livedoor Wiki(ウィキ) at 2007年01月18日 22:31:25

Lightbox Plus をブログで使ってみる

文字だけでも素晴らしいですけど、やっぱり軽快な画像表現で訴求効果を高めますか。画像をクリックして新しいウィンドーで生成したり、画像だけを表示すると言う落胆も無くなります。訪問者が画像をクリックすることに幸せを感じて、もっとみんなが喜ぶかも (*^^*)/~

Using only Java Script for ALBUM - livedoor Wiki(ウィキ) at 2007年01月18日 22:30:56