元スレ+ JavaScript の質問用スレッド vol.80 +
JavaScript覧 / PC版 /みんなの評価 :
701 = :
↑ミスりました
704 = :
>>699
var a = 'aaa';
var r = RegExp(a, 'ig');
$('.class0').each(function(){
var target = $(this);
target.html(target.html().replace(r, "bbb"));
});
705 = :
java scriptの動作がいまいち分からないんですが。
ブラウザがhtmlの中に書かれたjava scriptを
解釈して表示するまでの流れ(?)みたいなのを教えてくれませんか?
document.write("hoge");
とかしてるときに、なにがどう動いてるんでしょうか?
706 = :
ブラウザに積まれてるJavaScriptエンジンが構文解析を行いスクリプトを実行している
707 = :
>>706
ブラウザの、ソースを表示するで出てくるソースと
java scriptで動いてるのとの関係がいまいちどんな感じか分からないんですが.
708 = :
エスパーすぎる・・・
709 = :
>>707
ブラウザは受け取ったHTMLのタグやテキストをDOMっつー構造に再解釈する。
それを元にウィンドウ上に見えるように再構築する(レンダリング)。
それと別にブラウザはJavaScriptも解釈して実行する。
JavaScriptはレンダリング前のDOMに介入できる。
DOMが変更されるとブラウザはそのDOMを元に再レンダリングする。
大雑把に言うとこんな感じかと。
710 = :
>>707
ちなみにソースはレンダリングやJavaScript実行前の状態なので影響を受けてない。
Chromeの「要素を検証」とかで見れば影響後の状態も見れる。
711 = :
そんな説明がわかるわけもない初心者だろう
712 = :
そのレンダリングするエンジンが複数あるおかげで、俺らは困らされるんだがなw
Trident? あーあー聞こえねー。
713 = :
>>709
わかりました。ありがとうございます。
715 = :
手がかりになるようなヘッダが全くないのであれば
bodyのハッシュでも取っておいて比較するしかないんじゃない
JSだけでやるのは非現実的ですな
716 = :
どうもありがとうございますm(_ _)m
717 = :
ちょい補足
まず目的のサーバからどんなヘッダが返されているか確認するのが先
Content-LengthだけではなくAgeやEtagが利用できる可能性もある
それがまるでないようであればbody部のハッシュ
(短いならbody部そのもの)を取っておいて比較するしかない
MD5やSHA-1ハッシュをJSだけで計算するライブラリは
ちょっと検索すれば見つかるので
どうしてもJSでやりたければそういうのを使うのも手
719 = :
どのヘッダを使うにしても「前回の値」をどこに保存しておくかという問題はあるよね
サーバサイドの処理を挟まないのであればCookieかlocalstorageぐらいしかなさそうだけど
722 = :
JSライブラリの話はここでいいの?
724 = :
>>723
解決しますた…
ほんとすみませんでした
727 = :
個人的にはinnerHTMLは中身にテキストノードしかない場合に結構使うわ
729 = :
まあ先行実装だし非推奨だし
730 :
マウスでの mousedown や click、mouseover などでマウスが文字列の上にあるか
どうかというのを知る方法はないでしょうか?
文字列の上でクリックされた場合などはそれを選択しようとしている時だと思うの
で余計なことをしないようにとかいった風に使いなと思っています。
ある要素の上というのではなく、そこのマウス位置に文字列が実在するのかどうか
というのをどう判断して良いのかどうかどうしても思いつかなくて。
731 = 730 :
日本語ヘンですがすみません
733 = :
innerHTML を使うべきでない理由
・遅い
・テキストノード挿入時、HTMLエスケープしなければならない (予期せぬバグが混入する可能性がある)
・インラインJavaScriptとして埋め込むとき <> をUnicodeエスケープする必要がある
ちなみに innerHTML はHTML5で標準化されているので、>>3 は修正した方がいいと思う。
734 = :
>>733
HTML5はまだ勧告されてないよ
735 = :
>>734
勧告はとうぶん先だって言われてるが、最近の風潮は「使えるものは使っていく」というもの
勧告されていない≠使えない
そんなに心配ならWHATWGのほうのHTML5仕様にある、各ブラウザの実装対応状況を読めばいい
左側にフキダシみたく出るやつ
あれは実装が行われている場合、テストケースをパスしているかを表している
グレーアウトは未実装、赤は実装済だがテスト通過してない、緑は実装&テスト通過
>>733
innerHTMLも、使うシチュエーションによっては利点がある
大量のテキストを一気にDOMノード化したい場合とか
736 = :
>>730
mousedownとかを紐付ける要素を指定するときに、選択するようなものにしなければいいじゃん。
なんか使い方がおかしい気がする。どうしたいのか書いてみ?
737 = :
勧告されてなくても主要ブラウザは実装してるからね
738 = :
<a href="#" onmousedown="~~~">
↑これを実行しないようにしたいです
どうすれば良いですか?
740 = :
そうじゃなくて、元々HTMLに書かれているマウスイベントをJavaScriptで無効化したいんです。
741 = :
>>738
element.onmousedown = null;
742 = :
>>741
出来ました!ありがとうございます。
objs.snapshotItem(c).wrappedJSObject.onmousedown = null;
743 = :
>>735
innerHTML を使いたくなる気持ちはわからなくもないんだけど、innerHTML は文字列処理だからあまり JavaScript に合わない気がしてる。
多量のDOMノードといっても何らかの整形フォーマットがあるわけだし、厳密にフォーマットを定義したい場合はDOMで生成する方が適切だと思える。
(思想の違いだから、他人に押しつけることは出来ないけど)
ただ、もっと簡単にノードを生成できるメソッドは用意されてもいいと思う。
createElement, cloneNode, insertRow ... といろいろあるけど、querySelectorAll のような革新的なメソッドはないんだよね。
出来れば、こんなコードを書いてみたい。
var p = document.createNodeByQuery('p>span.hoge');
744 = :
それぐらいならすぐできるけど、他の属性やtextがめんどくさいな。
ってかそういえば前にelement作成用の関数作ったことあったわ。
MakeElement('test', ['table', ['border', '1'],
['tbody', ['id', 'tst_1', 'style.color', 'black'],
~
みたいな感じ。
745 = :
>>744
属性に関しては属性セレクタがあるし、http://www.w3.org/TR/css3-syntax/ に Syntax があるから作れないことはないと思うけど、「すぐできる」ってすごいな。
師匠と呼ばせてもらってもいいですか?w
テキストノードはCSSセレクタの泣き所だよね。
XPath式 にすれば一気に解決しそうだけど…。
746 = :
>>743
ZenCodingでそんなセレクタ指定のコーディング方法あったな
ul.tes>li*4ってタイプすると<ul class="tes"><li></li><li></li>・・・</ul>と展開される
おっといいアイディアが思い浮かんだぞ
747 = :
>>742
wrappedJSObjectってことはMozillaだろ
だったら直接removeAttribute使えよ
わざわざラップされてるのをはがすなよ
749 = :
>>744
jsでzencodingチックにDOM作成するプラグイン作った人はすでにいたよ
http://sakuratan.biz/jquery/zencoding/
ところでFireFoxもしくはChromeで、JSで作成したファイルを名前つけて保存させるには
location.href = 'data:application/octet-stream,'+encodeURIComponent(text);
みたいにするしかないっすか?
デフォルトのファイル名も付けられると便利なんだけど…
750 = :
javascriptの関数実行タイミングが意図したタイミングで動作しません。
<head>
<script language=javascript>
<!--
function send(){
(DBに書き込む処理@asp)
}
-->
</script>
<body>
<form>
<input type=button name=btn onClick="send()" value="次へ" >
</form>
</body>
</html>
「DBに書き込む処理」が、ページを開いたときに実行されていました。
(Page開いた時点でmdb開いてみると既に書き込まれている)
「次へ」ボタンを押したときに初めて実行されて欲しいのですが、
どのように直せばよいのでしょうか。ご教示下さい。
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.87 + (1001) - [97%] - 2011/6/21 6:33
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/10/26 4:18
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/11/15 20:32
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.130 + (1001) - [95%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.104 + (1001) - [95%] - 2013/1/28 4:00
- + JavaScript の質問用スレッド vol.103 + (1001) - [95%] - 2012/11/9 15:30
- + JavaScript の質問用スレッド vol.102 + (1001) - [95%] - 2012/9/11 17:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.101 + (1001) - [95%] - 2012/7/16 14:15
トップメニューへ / →のくす牧場書庫について