何かの判断をJSで行った後に、scriptタグで外部JSを読み込んだりする事がありました。jQueryをつかって、scriptタグを生成したときに変な挙動があったので回避するメモを残します。 JSのイメージは、 scriptタグの記述をStringで書いて、 それをjQueryの$を使ってタグを生成、 bodyタグへappendする流れです。 NGソース javascript 1 $('body').append($('<script>alert("アラート");</script>')); 純粋に書くと上記のような記述になるとおもいます。ところがこれを実行すると、 ')); } })();** ↑このようなscriptの途中の括弧だけが出てきてしまいます。これの原因は、「/」スラッシュが特殊な状態で認識してしまうみたいです。jQueryで普通に閉じタグを作るときに「/」をつかっても何も起きませんが、どうやらscriptの閉じタグだけ、うまく認識してくれないっぽい?です。調べてないのでたしかなことはわかりませんけどね。。 回避するOKソース javascript 1 2 $('body').append($('<script>alert("アラート");<\/script>')); //スラッシュの手前に、バックスラッシュ(¥でもOK)を置く。 「/script」という文字列がダメなら、「/」スラッシュの手前に、バックシュラッシュ(¥マーク)を置くと、変な挙動は回避され、上記のソースではちゃんとalert();が実行されます。正規表現の時と同じ、特殊文字に特殊な意味を持たせない。ということですね。 僕はこうします。 javascript 1 2 $('body').append($('<scr'+'ipt>alert("アラート");<\/scr'+'ipt>')); //「scr」と「ipt」という文字で連結 こうする必要はないかもしれませんが、scriptタグの記述が変な挙動を呼び起こしてしまうなら、いっそのこと「scr」と「ipt」という文字で連結させてしまおう!っておもいました。そもそもこんなことを書くこと自体マレかもしれませんが参考までに。

続きを読む

js 1 2 3 4 5 6 7 8 9 10 11 12 13 <script src="jquery-1.3.2.min.js"></script> <script> (function(){ if(typeof jQuery == 'undefined'){ return; } jQuery.noConflict(); jQuery(function($){ // ここに処理を記述 // $==jQueryで利用可能 }); })(); </script> このソースコードをペッと貼り付けて、実際に書き始める場所は10行目からです。この形が定着しているのは、いくつかの理由があります。 functionを大きく、( ) 括弧で括っているのは関数や変数をローカル化するため。 5行目のreturnは、jQueryのライブラリが何らかのエラーがあったときに、JavaScriptエラーを出さないようにするため。 8行目のnoConflictはprototype.jsなどの複数ライブラリを使用する際に、「$」を初期化するため。 9行目の引数$にすることによって、10行目以降に$==jQueryとして使うことができる

続きを読む

プロフィール画像

こたぽん

ビールと生ハムが好き

フロントエンドエンジニア

Tokyo