+ JavaScript の質問用スレッド vol.117 +

このエントリーをはてなブックマークに追加
1Name_Not_Found
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。
  回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止ではありませんが、ライブラリスレで聞くとより回答を得やすいかもしれません。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
2Name_Not_Found:2014/06/21(土) 14:57:03.96 ID:???
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
3Name_Not_Found:2014/06/21(土) 14:57:41.90 ID:???
■前スレ
+ JavaScript の質問用スレッド vol.116 +
http://peace.2ch.net/test/read.cgi/hp/1399764134/

■過去スレ全集
http://www2.atpages.jp/mirror/2ch/javascript/
http://usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)

■テンプレ案
http://jsfiddle.net/fH4cC/31/show/

■関連スレ
ECMAScript デス 4
http://toro.2ch.net/test/read.cgi/tech/1325448978/
【jQuery】JavaScript ライブラリ総合質問所 vol.3
http://toro.2ch.net/test/read.cgi/hp/1369444026/
【WHATWG】HTML5 Part6【W3C HTML WG】
http://toro.2ch.net/test/read.cgi/hp/1393153279/
Webサイト制作初心者用質問スレ part239
http://toro.2ch.net/test/read.cgi/hp/1393828207/
CSS初心者スレッド=12th=
http://toro.2ch.net/test/read.cgi/hp/1343429848/
Canvasについて語ろう
http://toro.2ch.net/test/read.cgi/hp/1305093769/
4Name_Not_Found:2014/06/21(土) 14:58:09.07 ID:???
■各種仕様 ( http://fiddle.jshell.net/vSqKr/33/show/#Link も参照 )
◆ Standard ECMA-262
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ (ECMAScript 3 和訳)
http://www.ecma-international.org/ecma-262/5.1/ (ECMAScript 5.1 HTML版)
http://people.mozilla.org/~jorendorff/es6-draft.html (ECMAScript 6 有志HTML版)
http://kangax.github.io/es5-compat-table/ (ECMAScript 5 compatibility table)
http://kangax.github.io/es5-compat-table/es6/ (ECMAScript 6 compatibility table)
◆ HTML Standard (HTML5)
http://www.whatwg.org/specs/web-apps/current-work/multipage/
http://momdo.s35.xrea.com/web-html-test/spec/WD-html51-20130528/Overview.html (HTML5.1 部分訳)
http://www.hcn.zaq.ne.jp/___/WEB/WebStorage-ja.html (Web Storage 和訳)
◆ Document Object Model (DOM) / CSS Object Model (CSSOM)
http://www.hcn.zaq.ne.jp/___/WEB/DOM4-ja.html (DOM Standard (DOM4) 和訳)
http://www.w3.org/TR/DOM-Level-3-Events/ (DOM3 Events)
http://www.w3.org/TR/uievents/ (UI Events)
http://www.hcn.zaq.ne.jp/___/WEB/cssom-ja.html (CSSOM 和訳)
http://www.hcn.zaq.ne.jp/___/WEB/cssom-view-ja.html (CSSOM View Module 和訳)
◆ その他のWeb関連仕様
http://domparsing.spec.whatwg.org/ (DOM Parsing and Serialization - innerHTML等)
http://www.hcn.zaq.ne.jp/___/WEB/XHR-ja.html (XMLHttpRequest 和訳)
http://www.hcn.zaq.ne.jp/___/WEB/File_API-ja.html (File API 和訳)
http://www.whatwg.org/specs/ (WHATWGの仕様一覧)
◆ MDN (Netscape/Mozilla)
https://developer.mozilla.org/ja/docs
◆ JavaScript Garden (ja)
http://bonsaiden.github.com/JavaScript-Garden/ja/
◆ JSON (JavaScript Object Notation)
http://www.json.org/json-ja.html
◆ MSDN Library
http://msdn.microsoft.com/ja-jp/library/yek4tbz0.aspx (JavaScript)
http://msdn.microsoft.com/ja-jp/library/cc427807.aspx (JScript)
http://msdn.microsoft.com/ja-jp/library/cc409712.aspx (DHTML)
5Name_Not_Found:2014/06/21(土) 15:01:26.88 ID:???
一部の人が、わーわーいっていますが、テンプレの修正は行いません。
今までの通り続けていきます。

なのでこのスレでライブラリ関連の質問はOKです。
lodashやjQueryの話題も問題ありません。

■諸注意
自治厨は嵐です。自分の好きな通りにスレを変えようとしているだけです。
ライブラリ系の質問は本スレッドで禁止されていません。一人で勝手に決めようとしてるだけです。
許可されたライブラリの話題を禁止しようとしたり荒らすなどの
行為が確認された場合は不要な争いを避ける為、スルーすることを推奨します。
6Name_Not_Found:2014/06/21(土) 15:01:58.55 ID:???
以上テンプレ終了
7Name_Not_Found:2014/06/21(土) 15:16:22.60 ID:???
>>1
8Name_Not_Found:2014/06/21(土) 15:27:23.06 ID:???
>>5
また、お前か
9Name_Not_Found:2014/06/21(土) 15:47:29.85 ID:???
ライブラリ禁止する発言が自治房でライブラリ許可する発言は自治房じゃないという矛盾
荒らしの理論だな
10Name_Not_Found:2014/06/21(土) 15:50:11.07 ID:???
ライブラリ禁止発言・・・迷惑
ライブラリ許可発言・・・している人は、禁止発言に対するレスとしてだけ。

ごく普通に、JavaScriptの話をしているのに、
それがライブラリだからって、JavaScriptではない自治の話を始めるんだ。
それが迷惑ということ。

ごく普通に、JavaScriptの話をしているのだから
ごく普通に、JavaScriptのレスをしようよ。
それだけのことじゃないか。
11Name_Not_Found:2014/06/21(土) 15:54:13.20 ID:???
vol115を読めば「ごく普通のライブラリの話」ではなかったことがわかるはずだが、荒らしに何を言っても通じないだろうな
12Name_Not_Found:2014/06/21(土) 15:56:27.88 ID:???
何も言っても通じないと思うなら諦めれば?
JavaScriptの話をしていることに間違いはないのだから
それで埋まったとしても、何も悪いことはないだろ?

それにくらべて、無関係な話でスレを埋めているのは誰だって話だよ。
13Name_Not_Found:2014/06/21(土) 16:20:59.50 ID:???
今まで通りライブラリ関連のコアな質問や返答は別スレに誘導しておけばいいよ
禁止までする必要はない
14Name_Not_Found:2014/06/21(土) 21:06:06.21 ID:???
テンプレに何の実効力もないと判明しているのに何故かテンプレに拘り続ける奴w
官僚主義の権化だな
15Name_Not_Found:2014/06/22(日) 01:07:34.85 ID:???
テンプレは基本守らなくていいものだそうです
16Name_Not_Found:2014/06/22(日) 01:16:09.79 ID:???
守りたい人は守ってもいいんですよ
17Name_Not_Found:2014/06/22(日) 01:16:35.50 ID:???
そもそも誰かがテンプレに勝手に書いただけなので関係ないです。
自由ですから。
18Name_Not_Found:2014/06/22(日) 01:24:04.48 ID:???
その通り
守ってもいいし守らなくてもいいです
19Name_Not_Found:2014/06/22(日) 01:25:52.02 ID:???
自治房は荒らしです
>>5は何の拘束力もありませんし、>>5こそが荒らしです
20Name_Not_Found:2014/06/28(土) 05:04:59.48 ID:???
テンプレ変えられずにリベラル君涙目
21Name_Not_Found:2014/06/30(月) 23:26:02.09 ID:???
ここは荒らしがたてたスレなので放置推奨
次スレはプログラム板に移行予定
22Name_Not_Found:2014/06/30(月) 23:39:27.18 ID:???
一人で行っとけよガキ
あるから使うだけ
以上
23Name_Not_Found:2014/07/01(火) 01:02:09.97 ID:???
このように暴言を吐いても許されるのがこのスレ
荒らしにとっては理想的な場だな
24Name_Not_Found:2014/07/01(火) 01:52:36.05 ID:???
自治厨がスレ立ててたぞ
ライブラリなどの質問を見たくない人はこっちへどうぞ

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
25Name_Not_Found:2014/07/01(火) 01:53:16.21 ID:Pj2maee6
様々なハンドラの中でpreventDefaultやstopPropagationをしていて
そのせいでイベントシステム全体の見通しが悪くなっています
想定外の動作が、preventやstop〜が原因かもしれないけど
そのpreventやstop〜を取り除いた時に何が起きるか、もう覚えてないって感じです・・。
こういうのどうやってますか?
26Name_Not_Found:2014/07/01(火) 01:54:23.45 ID:???
プログラム板の次スレ
荒らしを嫌う人はこちらにどうぞ

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
27Name_Not_Found:2014/07/01(火) 01:59:05.61 ID:???
ここは幅広い質問をしても文句を言われないスレであって
荒らしが許容されるスレではありません
荒らしは思いっきり殴ります
28Name_Not_Found:2014/07/01(火) 01:59:39.26 ID:???
完全に>>27が荒らし化してるなw
29Name_Not_Found:2014/07/01(火) 02:03:56.95 ID:???
小競り合いは荒れを招くだけなので
幼稚なレッテル貼りを許しましょう
自治厨はすみやかに植民して下さいね
30Name_Not_Found:2014/07/01(火) 02:05:35.17 ID:???
>>29
自治房は荒らしです
荒らすのは止めてください
31Name_Not_Found:2014/07/01(火) 02:12:24.35 ID:???
同種のイベント(たとえばmousedown)の中で一番最後に実行されるイベント
を設定するにはどうしたらいいですか?
ライブラリの影響は気にしません
自分のコードの中で一番最後に実行したい、ということです
32Name_Not_Found:2014/07/01(火) 02:21:07.43 ID:???
>>31
・一番最後にイベントを設定する
・イベントバブルを利用して親やdocumentにイベントを設定する。
・イベントを一つだけ設定して、その中で独自のイベントを管理する。

とかかな。

jQueryは実際にイベントを割り当てるのは一つで
内部でイベント管理してたはずだから
そういうjQueryプラグインを作れるかもしれないね。
33Name_Not_Found:2014/07/01(火) 02:22:16.60 ID:???
>>31
あ、一番いいのは、そういう順番に依存するものを
作ってはダメといういうこと。

一番最後に実行されるイベントを二つ
設定したらどうなるんだ?とかあるわけだし。
34Name_Not_Found:2014/07/01(火) 02:34:18.34 ID:???
もう一つおすすめはしないけど、
addEventListener(やattachEvent)を
独自の関数に置き換えるって手もあるな。

やり方は自分で調べてね。
35Name_Not_Found:2014/07/01(火) 04:14:43.10 ID:???
>>31
ハンドラの中でsetTimeout使う
0秒で
3631:2014/07/01(火) 04:20:51.94 ID:???
ありがとうございます
付ける順番と、DOMツリーに左右されるようなので、いろいろ検証したところ

$(document).on('mousedown',function(e){
console.log('nodelegate');
}).on('mousedown','body',function(e){
console.log('body');
}).on('mousedown','#test',function(e){
console.log('test');
});

とした時、非デレゲートのイベントが、最初に付けても最後に実行されると確認できましたので
これでやろうと思います
ありがとうございました
37Name_Not_Found:2014/07/01(火) 06:02:46.54 ID:npMnctQS
>>35
でもそれやったらpreventDefaultとか
きかないよね?
38Name_Not_Found:2014/07/01(火) 06:49:27.53 ID:???
ハンドラの中でsetTimeout0を使うと
何故すべてのハンドラの最後尾が保証されるのです?
タイミング次第では?
39Name_Not_Found:2014/07/01(火) 07:17:50.84 ID:???
preventDefaultした時に、
デフォルト動作と同じ操作、
すなわちフォーカス以外の部分をクリックした時にフォーカスを外す、
といったことを、最後尾のハンドラでするようにしたら、うまくいきました\(^o^)/
ありがとうこざいました
40Name_Not_Found:2014/07/01(火) 22:07:13.70 ID:???
以前、mousedownでstopPropagationしても、
そのマウスダウンから構成されるクリックを防ぐことは出来ない、という問題があり、
それに対してsetTimeoutで一定時間クリックを受け付けないようにする、という方法を提示しましたが、
マウスダウンハンドラの中でクリックを防ぐためのクリックハンドラを付ける、という方法を思いつきました
こっち方が自然かもしれません
オライリーってくっそ役に立つな
42Name_Not_Found:2014/07/02(水) 07:29:37.35 ID:???
>>36
この件ですが、windowで受けた方が後になりました
というかdocumentにデレゲートなしのmousedownを一時的に付けたりすることはわりとよくあるので
documentではアカンかったです
windowにmousedownを付けるのは普通の使い方をしている限りないので、いいかと思います
43Name_Not_Found:2014/07/02(水) 07:35:34.89 ID:???
>>42
もしかして、絞込してない?
documentにイベントをつけるにしても、
無関係の要素のイベントを取らないように、
どこから発生したかを調べるもんだよ。

やり方は簡単。

$(document).on('click', '.class', function() { ・・・ })

こういうふうにするだけで、classがついてる要素だけ
イベントを処理できる。
44Name_Not_Found:2014/07/02(水) 07:40:25.45 ID:???
そんなことはもちろん知っていますよ
ど素人じゃないんですから・・。
でもありがとうございました
45Name_Not_Found:2014/07/02(水) 14:35:00.96 ID:???
あごちゃんが社名を名指しして批判しているの見てショックを受けました
同業叩きは恥ずかしいですね
46Name_Not_Found:2014/07/02(水) 21:24:51.22 ID:???
あなたもその人を名指しで批判してるじゃないですか
このスレでそんなことはしないで下さい
47Name_Not_Found:2014/07/02(水) 21:30:08.25 ID:???
>>40
この件ですが、クリックを殺すためのクリックハンドラを付ける、という方法だと
何かのタイミングでそのハンドラが残ってしまい、
クリックが想定しないところで無効になってしまうようになったので、
時限方式に戻しました
時限方式はマシンの処理速度に依存するので
(とはいえ現実的に、mousedownとclickの間で200msもかかるマシンが現存するとも思えないのですが)
少し引っかかるのも事実です・・
48Name_Not_Found:2014/07/02(水) 21:34:27.95 ID:???
「クリック殺し」に到達する前にstopPropagationされていたのかもしれません
こうなると、フラグで管理する方がいいのかも
49Name_Not_Found:2014/07/02(水) 21:55:29.32 ID:???
マウスボタン少し長押ししたときってclick発生しないんだっけ
まじで!?
51Name_Not_Found:2014/07/02(水) 23:51:17.69 ID:???
var a = [1,2];
var b = 3;

aとbを足してcに[1,2,3]を代入する方法を方法を教えてください
やっぱり
c = a
c.push(b)しかないんですかね
52Name_Not_Found:2014/07/03(木) 00:12:56.38 ID:???
>>51
何種類か方法があると思うけど、何が最適かは場合によると思う。連続で何回も配列の値を増やし続けなきゃいけないとか、単純に一回だけとか。
53Name_Not_Found:2014/07/03(木) 00:49:16.68 ID:???
>>49
するよ
54Name_Not_Found:2014/07/03(木) 00:50:41.86 ID:???
>>51
c = a.concat(b);
55Name_Not_Found:2014/07/03(木) 02:13:23.65 ID:???
>>51
それだとaの内容も変わっちゃうから>>54以外にない
56Name_Not_Found:2014/07/03(木) 08:32:49.28 ID:???
condog
57Name_Not_Found:2014/07/03(木) 10:29:36.53 ID:???
引数の型が決まっている関数は毎回型チェックし、異なれば例外を投げるべきですか?
58Name_Not_Found:2014/07/03(木) 11:34:34.91 ID:???
>>57
例外を投げるか型変換すべき
intって使えたっけ?
6059:2014/07/03(木) 18:17:06.69 ID:???
スレ間違えました
61Name_Not_Found:2014/07/03(木) 21:27:36.88 ID:???
var a = "<hoge1hoge2>";
a.match(/<[^<>]+>/); // ["<hoge1hoge2>"]

返り値を"hoge1hoge2"にしたいのですがどうしたらいいですか
a.match(/<([^<>]+)>/)[1];としたらいけましたがマッチが一つだけのときこれは一般的でしょうか
あと<>以外は使わないからという理由で[^<>]+としてますけどこれも一般的な方法でしょうか
62Name_Not_Found:2014/07/03(木) 22:05:13.61 ID:???
<([^<>^])>
にしたら顔に見える
63Name_Not_Found:2014/07/03(木) 22:45:32.62 ID:???
letが使えるなら全てletにするべきですか?
64Name_Not_Found:2014/07/03(木) 22:54:42.99 ID:???
>>63
古いブラウザの対応が要らないってことだよね?
ならletでいいんじゃないかな。

するべきとまでは言わないけど、letの方が好ましいし、
varを使う理由はないと思う。
65Name_Not_Found:2014/07/04(金) 00:53:47.66 ID:???
let it go〜 let it go〜
66Name_Not_Found:2014/07/04(金) 05:10:53.80 ID:???
>>61
例えば、http://aaa/bbb/ccc のaaaを取り出すには、
http://([^/]+)/ とする(エスケープを無視しています)

matchはオプション無しで、複数箇所に該当するの?
普通は、/パターン/g と、gオプションを付けると、
すべてにマッチするんだが
67Name_Not_Found:2014/07/04(金) 16:42:12.84 ID:???
<div>
<p>a</p>
<p>b</p>
<p>c</p>
</div>

子要素がいくつあるかわからないjqueryでこんな感じで書いてるんですけど
$(document).on('click', 'div>p', function(e){
});
これを生のjavascriptでどういうふうに書くのか教えてください
68Name_Not_Found:2014/07/04(金) 16:50:02.33 ID:???
ソース読め
69Name_Not_Found:2014/07/04(金) 17:43:43.23 ID:???
var a = {a:1}
var b = {b:2}
aとbを結合して{a:1,b:2}にする方法を教えて下しあ
70Name_Not_Found:2014/07/04(金) 20:07:30.10 ID:???
>>69
forで回して片方に一個ずつ追加、あるいはjqueryのextend
71Name_Not_Found:2014/07/04(金) 20:55:30.15 ID:???
そんな地道な方法しかないのですかショック
72Name_Not_Found:2014/07/04(金) 21:05:18.30 ID:???
一行でかけるのに地道ってよくわからないが。


lodashを使ったら、一行で書ける。これより単純なものはないと思うけどね。

http://lodash.com/docs#merge

_.merge(names, ages);
// → { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
73Name_Not_Found:2014/07/04(金) 21:57:08.49 ID:4REWN9O3
$(".hoge") ← 複数あります


これにanimate()させたあと、全てのオブジェクトがアニメーションを終えてから
一度だけ実行される関数をコールバックさせるにはどうすればいいのでしょうか?
74Name_Not_Found:2014/07/04(金) 22:19:32.72 ID:???
>>67
html
<div id="hoge">
<p>a</p>
<p>b</p>
<p>c</p>
</div>

javascript
var div = document.getElementById('hoge');
var nodes = div.childNodes;
var i=0,n;
for (;n=nodes[i++];) {
if (n.nodeName !== 'P') { continue; }
n.addEventListener('click',function(e){alert(e.clientY);},false);
}
75Name_Not_Found:2014/07/04(金) 22:28:11.42 ID:???
>>73
複数ある$(".hoge")のすべてに、animate()の終わりに自分以外のanimate()が終了していたら
コールバック実行それ以外スルー、というフラグを立てる
76Name_Not_Found:2014/07/04(金) 22:44:39.74 ID:???
>>75
それはダサいね。
最近はフラグ=バッドノウハウ と考えていいぐらいだと思うわ。

promise使えるんだからそれでできるじゃない?って
思ったらこんなの見つけた。

http://tsmd.hateblo.jp/entry/2013/01/18/173509

試してないけど、これでいいんじゃね?
77Name_Not_Found:2014/07/04(金) 22:47:29.36 ID:???
>>74
そりゃだめだろw

$(document).on(イベント, セレクタ)の形をとってるんだから
addEventListernerはdocumentiに対して実行しなきゃ。

と問題の指摘はするけど、面倒だから俺は書く気無いけどね。
素直にjQuery使えと。
78Name_Not_Found:2014/07/04(金) 23:15:32.17 ID:???
>>67
document.addEventListener('click', function (event) {
 var target = event.target, parentNode = target.parentNode;
 if (target.tagName !== 'P' || !parentNode || parentNode.tagName !== 'DIV') {
  return;
 }
 // 処理
}, false);
79Name_Not_Found:2014/07/04(金) 23:23:51.14 ID:???
意外と知られてないけど、jQueryで

$(document).on('click', 'div>p', function(e){
});

ってやったとき、div>p にマッチする要素だけじゃなくて、その子要素をクリックしてもハンドラが呼ばれる

ソースを読むと、targetがセレクタにマッチしてるかどうかだけではなくて、
targetの祖先要素がセレクタに引っ掛かるかも調べてる
80Name_Not_Found:2014/07/04(金) 23:35:12.72 ID:???
>>79
つまり、

<a href="URL"><strong>ここ</strong>をクリック</a>

っていう場合の、「ここ」をクリックしてもリンクが
発動するのと同じことでしょ?

あたりまえだと思うのだけど。
81Name_Not_Found:2014/07/04(金) 23:39:24.24 ID:???
>>75
>>76
ありがとうございました。
82Name_Not_Found:2014/07/04(金) 23:39:33.40 ID:???
>>78がそうなってないって言いたいんだろ
83Name_Not_Found:2014/07/04(金) 23:41:06.06 ID:???
意外と知られてないって書いてあるから、
よく知られてるって言ってるんだよ。
84Name_Not_Found:2014/07/04(金) 23:41:22.65 ID:???
>>75
>>76
ありがとうございました。
85Name_Not_Found:2014/07/04(金) 23:42:06.63 ID:???
jQueryと同等のものを書こうとすると
大変だなぁってのがよく分かるね。
8678:2014/07/04(金) 23:56:09.26 ID:???
>>80
確かにそうだけど、>67では接触しないから端折った
parentNodeを遡ればいいから修正はそれほど難しくないかと
87Name_Not_Found:2014/07/05(土) 17:43:16.25 ID:???
イベントハンドラを設定した要素を削除したときってイベントハンドラの情報はメモリに残ったままになりますか?
88Name_Not_Found:2014/07/05(土) 17:45:49.76 ID:???
ブラウザにバグとかなければ大丈夫だと思うが、
そういう時でも安全に要素を削除できるというのが
jQueryのメリットの一つだし、特定のブラウザでは問題あるかもね。
89Name_Not_Found:2014/07/05(土) 18:04:10.93 ID:???
つまりイベントハンドラを削除してから要素を削除するべきですか?
90Name_Not_Found:2014/07/05(土) 18:44:26.85 ID:???
>>74
そもそもこれは子要素全てにイベント定義してるから>>67のとずれてるよね
91Name_Not_Found:2014/07/05(土) 18:55:07.45 ID:???
仕事でやる場合javascriptをそのまま書くのとjqueryなどの総合ライブラリを使うのどっちが多いですか?
92Name_Not_Found:2014/07/05(土) 19:07:07.29 ID:???
>>91
いろんな企業のサイト見て、jQuery使っているかどうか判断すればいい。
93Name_Not_Found:2014/07/05(土) 19:09:42.01 ID:???
jQuery使っている所が大半だろ。

そうじゃない所はjQueryでは力不足で
もっと大きなライブラリを使うような所
94Name_Not_Found:2014/07/05(土) 20:22:35.36 ID:???
>>89
jqueryを使ってないならそうする
95Name_Not_Found:2014/07/05(土) 20:23:22.09 ID:???
>>91
jqueryはもはやJavaScriptの一部みたいなものなので使わないことはあり得ない
96Name_Not_Found:2014/07/05(土) 20:53:22.99 ID:???
プログラマ業界ではjavascriptの仕事は多いですか?
97Name_Not_Found:2014/07/05(土) 21:10:38.47 ID:???
>>89
removeChild してから removeEventListener でも良い
どちらにしても removeEventListener は実行する
98Name_Not_Found:2014/07/05(土) 22:57:42.42 ID:???
>>96
いわゆるフロントエンドエンジニアになりたいならjsに精通してて1から書けたりメンテナンスができるような知識が必要。最近はそういう需要が増えていると思う。
99Name_Not_Found:2014/07/06(日) 00:10:16.15 ID:???
foo && ( bar = func(c) );

こんな形の式ってどういう処理になるんですか?
if条件になってるわけでも、結果を何かに代入してるわけでもないし、ビット演算かと思ったら違うみたいだし
100Name_Not_Found:2014/07/06(日) 00:25:17.72 ID:???
糞コードだねw

if (foo) {
 bar = func(c);
}

これと一緒。
101Name_Not_Found:2014/07/06(日) 00:29:46.73 ID:???
>>100
あー、なるほど!処理順か!納得した納得できた

どこで見つけたコードかというとyoutubeのhtml5playerのjavascript文
読みにくくて仕方ないわ
102Name_Not_Found:2014/07/06(日) 00:32:08.09 ID:???
別にクソコードじゃないよ
そういう書き方をしたい場合もある
103101:2014/07/06(日) 00:34:54.55 ID:???
>>100
お礼が欠けてました、ありがとうございます。いや助かった
評価の順番といわれるまで何のことだか全然わからなかった、よく考え付くもんだほんと
104Name_Not_Found:2014/07/06(日) 00:39:37.48 ID:???
わざと読みにくくさせる
つまり暗号化させたい時w
105Name_Not_Found:2014/07/06(日) 00:46:51.19 ID:???
Googleはショートコーディングの為に使うが、機械化してるので元々は難読なコードではない
106Name_Not_Found:2014/07/06(日) 01:07:16.87 ID:???
圧縮するとそういう風になるんだね
107Name_Not_Found:2014/07/06(日) 01:14:44.64 ID:???
function hoge(a) {
 console.log(a || 'ふが');
}

hoge('ほげ') // ほげ
hoge(); // ふが

みたいなやつも最初演算だと思ってわからなかった
とくに”ふが”の部分が0とかだったりすると
ますます何がわからないのかわからない状態に陥ってた
108Name_Not_Found:2014/07/06(日) 01:48:56.35 ID:???
perl使いが>>99みたいな書き方するよね。
109Name_Not_Found:2014/07/06(日) 01:58:34.44 ID:???
Perlだったら

bar = func(c) if foo;

こう書けば良い。もっと綺麗に書ける。
110Name_Not_Found:2014/07/06(日) 03:07:41.71 ID:???
複数のWebブラウザ(PCのほかにスマホ含む)でAjax的な動作をさせたい場合に
どのようなアプローチが効率的ですか?
とりあえず思いつく線だと
1.ECMAネイティブで記述する
  最近はIE6みたいな俺実装ブラウザは減った気がする。実行速度的に有利?
2.Ajaxフレームワークを用いる
  コーディングは楽になりそうだけど、フレームワーク内の見通しがよくない他
  コードが増加しデバッグやの手間も増える気がする
111Name_Not_Found:2014/07/06(日) 03:24:21.87 ID:???
PaaSでnode.js利用してSoket.IOを使う どや!
112Name_Not_Found:2014/07/06(日) 04:01:01.44 ID:???
どうせjqueryは使うんだからjqueryでやるのがいいんじゃない
113Name_Not_Found:2014/07/06(日) 05:29:32.53 ID:???
ネイティブで、そこそこの時間で書けるならそれが一番じゃねーの
事前にどこまでをサーバ側にさせるか良く考えればあんまり問題おきないし
114Name_Not_Found:2014/07/06(日) 07:36:21.22 ID:???
>>110
> 1.ECMAネイティブで記述する
ECMAScript には XMLHttpRequest も ActiveXObject も存在しない

3. XMLHttpRequest, ActiveXObject を用いる
コーディング分岐はたいしたことはないのでこれで十分
115Name_Not_Found:2014/07/06(日) 07:43:13.64 ID:???
jquery使えば分岐もいらない
116Name_Not_Found:2014/07/06(日) 08:40:20.93 ID:???
ネイティブJavaScriptで書いてる人は独自ライブラリを持っているだろうから、ライブラリ云々は問題じゃない
自分で使い慣れたものが一番いい
勉強する気があるなら両方書いてみるといい
117Name_Not_Found:2014/07/06(日) 11:08:28.54 ID:???
沢山の人々に使われ、それだけ鍛えられているjqueryを使わず
わざわざ自作ライブラリを使う意味がワカンネ
118Name_Not_Found:2014/07/06(日) 11:25:27.15 ID:???
>>99
&& を「ならば」に読み替えるというのもあるな
119110:2014/07/06(日) 12:23:32.65 ID:???
レスありがとうございます
過去に複数のWebブラウザに対応(ただしPC限定)したAjaxアプリ的なのを作ったことが
あるのを思い出して今確認してみました。結構古い物ですが当時の実装は・・・
Webブラウザの対応はFirefox3.0とIE8のIE6モードでXMLHttpRequestとaddEventListenerを
自作ライブラリで抽象化していました。開発時にはPC版のChromeとSafari、IE6でも期待した
動作をすることを確認していたはず・・・モバイル環境は未考慮でマウスUI前提です
現行のWebブラウザに対応する場合はXMLHttpRequestの処置は必要みたいですが
addEventListenerはそのまま書いて大丈夫そうですね

>>114
なるほど、そういうことなのですか。勉強になりました

> jQuery
こういうAjaxフレームワークって罠とかないのですかね?
Webブラウザの差違が完全に吸収されて、かつ動作が安定している(せめてWin32API程度には)ので
あれば使う価値があるかなと思います
中途半端に動くようなトラブルはフレームワーク内部にまで立ち入ったデバッグが必要になって苦労する
場合があるので勘弁願いたいです。昔、WinアプリでGUIフレームワークを使ったときに、この手のトラブルで
だいぶ苦労した記憶があるので、ネイティブで書いた方が最終的に楽なのではという気持ちはあります
120Name_Not_Found:2014/07/06(日) 13:54:58.91 ID:???
> こういうAjaxフレームワークって罠とかないのですかね?

自分で作ったものには、罠があるよ。
なにせ全部のブラウザで試してないだろう?
特定のブラウザで動かないことは多いだろう。

それに自分で作ったものは、中途半端でトラブルで
ソースコード内部にまで立ち入ってデバッグしなければならない。
自分で作ってるから他の誰もデバッグしてくれないしな。

そしてネイティブで書くと、各ブラウザで発生するトラブルを
全部一人で解決していかなければならない。

そしてひとしきり解決して思うことは、
今自分はjQueryの劣化版を作ってるだけなんだってこと。
121Name_Not_Found:2014/07/06(日) 14:33:08.08 ID:???
jQuery妄信もそれはそれでどうかと思うがな
122Name_Not_Found:2014/07/06(日) 15:06:58.47 ID:???
jqueryはデカイからな
123Name_Not_Found:2014/07/06(日) 15:19:14.76 ID:???
jQueryを使おうが何を使おうがトラブルが起きた時に解決しなきゃいけないのは結局自分じゃね?w
124Name_Not_Found:2014/07/06(日) 16:35:12.61 ID:obw+ibA0
ランダムで数字を発生させて、その発生させた数字に従って、変数を処理したいと思っています。
(例えば、rndで0がでたとして「りんご」を表示したい)
下記のようにしたのですが、失敗しました。
どうすればいいですか?

var ans0 = "りんご"
var ans1 = "みかん"
var ans2 = "バナナ"

var rnd = Math.floor( Math.random() * 2 );

document.write(ans + rnd);
125Name_Not_Found:2014/07/06(日) 18:15:25.39 ID:???
>>124
ans + rnd は、

変数 ans の値と変数 rnd の値に対し、 + 演算子による演算を行う、と解釈される
(「変数」と書いたがプロパティの場合もあり得る。が、ここでは本質的でないので説明は省く)
ここでは ans という名前の変数は宣言されていないのでエラーになる

ans という名前と、 rnd の値に対し、文字列の連結演算を行うわけではない
そのようにしたい場合は "ans" + rnd と書かなければならない

次に
document.write("ans" + rnd);
に変えたとしても、 "ans" + rnd の結果は、変数名ではなく、文字列と解釈されるので
"ans0" "ans1" 等々が単に文字列として出力されることになる
結果の文字列に「対応する」値を出力させたいなら、連想配列を利用する必要がある

var answers = {
ans0: "りんご",
ans1: "みかん"
ans2: "バナナ"
}
document.write( answers["ans" + rnd] );
126Name_Not_Found:2014/07/06(日) 18:48:59.39 ID:???
普通に考えたらこうやるべきだけどな。

var answers = ["りんご", "みかん", "バナナ"];
document.write( answers[rnd] );
127Name_Not_Found:2014/07/06(日) 21:03:09.71 ID:???
>>125-126
ありがとうございます。
「document.write(ans0); 」と直接指定したときには、「りんご」と直接表示されたので、なんで出ないのか困っていました。
もう一つお聞きしたいのですが、「document.write (ans[rnd])」と書いてはなぜダメなのでしょうか?
ソレ配列じゃん
変数と配列の違いでググれ
129Name_Not_Found:2014/07/06(日) 23:10:26.17 ID:???
>>127
ans[rnd] は ans0 等ではなく ans[0] 等に評価される
これは ans という名前のオブジェクト変数/配列変数の 0 という名前/インデックスのメンバを表す
しかし ans という名前の変数は宣言されていないのでエラーになる

コードというのはなるべく簡単に表記できるように
( ans[0] を「ans という名前の…」などと書かなくとも済むように)
背景の仕組みは可能な限り省略され、
冗長な部分は可能な限り削ぎ落として
記される、記せるようになっているのが常だ

コードの表層ばかり見ていてはだめで、背景の仕組みをもっと理解する必要がある
130Name_Not_Found:2014/07/06(日) 23:11:56.99 ID:???
jqueryのmouseleaveハンドラで要素を消しているのですが、
稀に何かのタイミングでその要素が残ることがあります
しかし条件が分からないのです
mouseleaveが発生しない条件って何でしょう?
131Name_Not_Found:2014/07/06(日) 23:58:18.66 ID:???
mouseout系は、その一回のイベントを受け損ねたら
ずっと残り続けてしまうので、
脆弱だとは言えると思います
とはいえjqueryのmouseleaveはかなりの強固なので、
信用していたのですが・・
132Name_Not_Found:2014/07/07(月) 00:22:39.44 ID:???
>>98
遅レスですがここの質問がある程度わかりオライリーをある程度読めれば普通の会社くらいは行けますか?
133Name_Not_Found:2014/07/07(月) 00:49:28.97 ID:???
バナナが絶対選ばれないのは誰も指摘しないのか
134Name_Not_Found:2014/07/07(月) 01:24:58.28 ID:???
だってバナナだし
135Name_Not_Found:2014/07/07(月) 01:29:35.03 ID:???
>>132
はじめてのJavaScript、秀和システム
掌田津耶乃(しょうだ つやの)、2013

オブジェクト指向、DOMについて、
各100ページの説明があるので、おすすめ
136Name_Not_Found:2014/07/07(月) 01:41:34.69 ID:???
>>135
それ前にこのスレに書かれて叩かれてた本やん
遠回しな叩きか?
137Name_Not_Found:2014/07/07(月) 04:09:42.11 ID:???
>>132
何が普通でどういうレベルの募集に対応したいのか知らんが
設計済みならコーディングは一通り出来ます、って人が多いんじゃないかな、ライバルは

個人的には「自分、英語ダメなんでwww」っていうのが困る
138Name_Not_Found:2014/07/07(月) 05:23:01.23 ID:???
プロになりたいならプロが作る程度のものを作れるようになればいい
どのくらいの知識があれば会社に入れるかとか、そんなこと考える必要ない
139Name_Not_Found:2014/07/07(月) 12:15:52.01 ID:???
>>132
twitterでjavascriptのネタをつぶやいたり批判したりできるぐらいの実力が無いと大手は無理ですが
底辺の会社ならいけますね
140Name_Not_Found:2014/07/07(月) 15:33:04.81 ID:???
ブール値の変数名はboolとbooleanどっちがいいですか?
141Name_Not_Found:2014/07/07(月) 19:01:54.42 ID:???
自分では何も考える気のない丸投げ質問ばかりだな
142Name_Not_Found:2014/07/07(月) 19:30:45.30 ID:???
>>140
俺だったら値のタイプじゃなくて値を何に使うかで名前つけるけど
143Name_Not_Found:2014/07/07(月) 21:33:57.59 ID:???
>>135
俺もこれ読む価値あると思う。
object、prototypeなどの概念については詳しい。
学習始めて2冊めくらいに読むにはいいんじゃないか。

そのぶんjquery等の即使える技術については言及が少ないが。
144Name_Not_Found:2014/07/07(月) 22:43:17.20 ID:???
>>135
またお前か? この本はだめだって過去スレでやっただろ
+ JavaScript の質問用スレッド vol.114 +
http://toro.2ch.net/test/read.cgi/hp/1394931594/743

743 :Name_Not_Found:2014/04/25(金) 13:36:40.15 ID:???
コードあるじゃん。レビューできるなw
http://www.shuwasystem.co.jp/products/7980html/3813.html

ダメなコード例、注意点として書いてあるだけかもしれないけど見ててもやっとした点。

全体的に、カンマ、forのセミコロンの後にスペースがない。時々ある(統一されてない)
関数は基本的にグローバル空間に定義(無名関数ほぼ無し)
クラスの作り方が入門書にしては詳しいが、Javaっぽくて、JavaScript風ではない。
=== が使われていない。

・chap2.txt   いきなりconst。まあこれ以降使ってないみたいだから単なる説明か。
・chap4.txt   配列に for in 使ってる。
・chap5.txt   非標準のconstructor.nameがでてきてる。
・chap7.txt   <body onload="init()"> とか書いてある。
  以前の章にsortとかmapとか出てきてるのに、関数の引数に無名関数を直接渡すのがaddEventLisnerだけ。
・chap9.txt   いきなりハンガリアン使い出したと思ったら、docCookiesはこれかhttps://developer.mozilla.org/ja/docs/DOM/document.cookie
  PHPでてきてんだけど、なんで最終行でflush()わざわざ実行してんの?
  いきなりInt8Array使ってんだけど?
・chap10.txt   jQuery使ってるのはこれだけ(入門書ならまあいいが)
  jQueryの処理の開始で普通に使う$(function() {})ではなく、$(window).load(function() {} )を使っている。
  $("#msg").each(・・・)使うのが普通の所で、わざわざ$.each($("$msg"), ・・・)を使ってる。

感心できる点・・・無し
典型的な入門書。たぶんMDCみながら初心者向けっぽいのをピックアップしただけで筋道立てて教えていない。
ぐぐってサンプル見つけてまとめただけ。最新、または常識的なやり方を知らず作者の実経験レベルは低い。
というのが俺の印象。本気で勉強したいときに見る本ではなく良書にはなりえない。
145Name_Not_Found:2014/07/07(月) 22:59:21.56 ID:???
>>132
ある程度の範囲が曖昧すぎて回答できない
オライリー本も何の本か書いてないので答えられない

最近、出ている質問には全て答えられないとやってけないと思う
DOM, ECMAScript, XMLHttpRequest 等の代表的なAPIのマスターは必要条件
書籍は『JavaScript 第6版』を熟読
まず、書籍の内容が理解できる程度に習得してから徐々に慣らしていく
自分でイメージしたプログラムを他人のコードをコピペせずに作れるようになれば一人前

jQuery等のライブラリは使うだけじゃなく、jQueryコードがどのように動いているか、コードリーディングで把握できる力を身につける
ブラックボックス化したコード(読む力がないから読まない)に依存することほど危険な事はない
146Name_Not_Found:2014/07/07(月) 23:17:38.02 ID:???
仕事で必要になったときすぐ勉強して覚えられる人なら普通の会社でやってけるよ
147Name_Not_Found:2014/07/07(月) 23:29:56.87 ID:???
>>143
著者さん宣伝ご苦労様です
148Name_Not_Found:2014/07/07(月) 23:37:11.13 ID:???
>>135
本の紹介なんて望んでない展開なのに唐突でわろた
149Name_Not_Found:2014/07/08(火) 00:56:10.54 ID:???
セッターメソッドの場合は型を変数名にするのは当然だと思いますが?
setHoge(str)
とするのなら
setHoge(bool)
とするのは自然なことです
したがってboolかbooleanかは妥当な疑問だと思いますが?
150Name_Not_Found:2014/07/08(火) 00:57:24.02 ID:???
文字列の変数名をstringでなくstrにするように
booleanもboolにするのがいいですね
俺はF(フラグ)で置き換える
152Name_Not_Found:2014/07/08(火) 01:11:32.39 ID:???
boolだからといってフラグとは限らないんじゃね
153Name_Not_Found:2014/07/08(火) 01:41:17.56 ID:???
booleanはTypeScriptの予約語だから念のため止めとけ
154Name_Not_Found:2014/07/08(火) 01:47:41.40 ID:???
ありがとうございました
155Name_Not_Found:2014/07/08(火) 01:57:26.44 ID:???
>最近、出ている質問には全て答えられないとやってけない

んなこたない
必要なのは知識ではなく問題を解決していく力
つまりコーティングよりデバックのほうが大事だと
157Name_Not_Found:2014/07/08(火) 04:27:00.32 ID:???
だが使えるヤツかやってけるヤツかどうかと
それ以前に採用されるヤツかどうかは別問題
158Name_Not_Found:2014/07/08(火) 10:54:15.99 ID:???
非同期処理が終わらない間は次の非同期処理を始められないようにするには
どうしたらいいですか?
159Name_Not_Found:2014/07/08(火) 10:57:31.75 ID:???
最初の非同期処理の結果が出るのをwhileでずっと待たせておけばいんじゃね
160Name_Not_Found:2014/07/08(火) 11:29:02.74 ID:???
>>158
promise使うとか

>>159
javascriptはシングルスレッドだからあかん
161Name_Not_Found:2014/07/08(火) 11:45:28.49 ID:???
今のこれまでのIEでpromise動くん
162Name_Not_Found:2014/07/08(火) 13:58:51.72 ID:???
>>158
非同期処理の最終Statementで次の非同期処理を呼び出すだけ
難しく考えすぎ
163Name_Not_Found:2014/07/08(火) 14:21:29.94 ID:???
>>151
自分はis_hogehogeになることが多い気がする
何れにせよコメント以外でboolって書くことはほとんどないなあ
164Name_Not_Found:2014/07/08(火) 15:06:01.73 ID:???
>>158
requestAnimationFrame(かsetTimeout)で処理が終わるかどうかを定期的にポーリングする
その際には状態遷移(いわゆるステートマシンの作成)をする必要はある

世の中非同期処理にはpromiseとか言ってるが、一定間隔のポーリングが一番簡単
ゲームはみんなそうやっているが、デメリットもあるので必ず適合するわけではない
165Name_Not_Found:2014/07/08(火) 19:06:03.40 ID:???
>>149
String 型の汎用関数内なら変数名「string」は自然だが、「セッターメソッド→変数名string」は自然ではない
セッターメソッドは必ずしも汎用関数ではないからだ
例えば、String.prototype.trim はString型に対しての汎用関数だから変数名stringは自然だろう

同じ理屈で Boolean型の汎用関数なら変数名「boolean」は自然といえるが、true, false 以外に値のないBoolean型で汎用関数は想像し難い
それが Boolean.protype に存在するに足る関数で宣言された変数ならば、変数名「boolean」は相応しいだろう
166Name_Not_Found:2014/07/08(火) 21:05:18.87 ID:???
>>164
> 世の中非同期処理にはpromiseとか言ってるが、一定間隔のポーリングが一番簡単
> ゲームはみんなそうやっているが、デメリットもあるので必ず適合するわけではない

ポーリングは効率が悪い。チェックする間隔を短くすれば負荷が高まるし、
間隔を長くすれば、遅延が起きる。

そこで効率よくしようという発想で改善されたのが非同期処理。
promiseはその非同期処理を簡単に書けるようにしたもの。

ポーリングがダメというのを出発点として、それに代わるいい方法をってことで
できたものなんだから、今更ポーリングにするのは時代を逆行してるよ。



ゲームではそうやっているというが、ゲームだけが例外。
ゲームは画面更新間隔(フレーム)というものが存在し、この1フレームは1秒間に
30回だったり60回だったりするんだが、1フレーム内でユーザーの入力を検出する。

つまり、画面の更新間隔と入力検出が同期取られてるわけ。これにより1フレームで
入力できるのは1回だけというふうに公平なゲームとして安定した動作がさせられる。
でもこれはゲーム特有の話で、普通のアプリには参考にならない。
167Name_Not_Found:2014/07/09(水) 01:04:35.81 ID:???
>>166
別にポーリングが万能とは思わないけど、どんなUIであろうと画面を1/60以上の頻度で更新する事は無理だ
(最近は240Hzのゲーミングモニターとかはあるが…)
だから、1/60秒単位でポーリングするからといってパフォーマンス的に問題がある事はない
通常の非同期処理と混ぜる事も出来るし、一つの方法論として考えてもらうだけでいいよ
168Name_Not_Found:2014/07/09(水) 01:57:31.84 ID:???
promiseって初耳なんですけど
常識なんですか?
169Name_Not_Found:2014/07/09(水) 02:45:52.56 ID:???
javascript promiseでぐぐって察してください
170135:2014/07/09(水) 04:57:47.63 ID:???
このスレには、ろくにわかっていないクセに、
外人の本やライブラリを、神の如くあがめる香具師がいる

知識なんてネット上に無限にある
あるけど皆、東大に合格できないだろ?

大事なのは知識の多さではなく、本人の吸収率や上達である。
だから、個別教育が重要。
初心者は、日本人の簡単な本で勉強したらよい
難しい外人の本を読んでも、時間のムダで、吸収率が悪い

実際に漏れは、その本を読んで上達した。
やり方さえ覚えれば、知識はネットで調べればよい
知識なんて枝葉末節だし、すぐ変化するもの

それにプログラムはデバッグしながら、間違えながら作るもの
些細な知識よりも、大まかな手順を覚えること
試行錯誤しながら進むのが、人生
171Name_Not_Found:2014/07/09(水) 05:02:24.16 ID:???
技術に日本人も外国人もないだろ
「日本人の簡単な本」って何だよ
172135:2014/07/09(水) 06:10:24.22 ID:???
外人の本は、書きなぐりみたいな雑な本が多い
文章が長いくせに、何を言っているかわからない。
図が無い。レイアウトが悪い。
カラーじゃなく、白黒だけの本

日本人の本の方が、レイアウトや構成、視認性がよく、
短時間で理解できる

またその本に何を書かないか、というのも重要。
特に重箱の隅をつつくような知識は、
載せても覚えられないし、吸収率も悪く、時間のムダ
実際に必要になった時に、調べたらすむ

資格の学校のTACみたいなのが、理にかなっている
必要最小限の知識と勉強時間で、
200時間の勉強で、ギリギリ60点で合格
173Name_Not_Found:2014/07/09(水) 06:15:39.35 ID:???
そうか?
ジャップ本はマニュアルをそのまま転載したような本が多い印象
174Name_Not_Found:2014/07/09(水) 06:36:04.45 ID:???
国籍関わらず、人によるわ
特定の人を持ち上げようとするのに国籍持ち出してくるのはちょっと無理がある
// 個人的にはオライリー本は好かんが
175Name_Not_Found:2014/07/09(水) 07:22:14.69 ID:???
プロミスっていうのはIEで使えないようですね
176Name_Not_Found:2014/07/09(水) 09:13:55.03 ID:???
いくつかのボタンがあり、それを押すと処理が走ります
その処理の中にはそこそこ重いものものあります
重い処理の途中にボタンをクリックされ、更に他の処理が走り出すと
整合性がおかしくなる可能性があります
このような場合、どうやるのがセオリーでしょうか?
ボタンを押した時にキューを積んで、それを順次する処理するなどでしょうか?
177Name_Not_Found:2014/07/09(水) 09:48:20.58 ID:???
複数の行で構成された巨大なデータをajaxでサーバに送信する場合、
ブラウザが途中で落とされる可能性もあると思います
するとデータが不整合を起こすはずです
サーバ側で、データを全て受信してから書き込む、みたいな処理にしないといけないのでしょうか?
178Name_Not_Found:2014/07/09(水) 09:57:02.77 ID:???
javascript特有の問題なの?
179Name_Not_Found:2014/07/09(水) 10:13:43.27 ID:???
具体的にどうしてるかって話だろ
何が言いたいんだカスが
180Name_Not_Found:2014/07/09(水) 10:16:35.64 ID:???
JavaScriptの話以外が気にくわない奴はプログラム板のこっちに行っとけ

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
181Name_Not_Found:2014/07/09(水) 10:42:31.63 ID:???
GoogleのDart言語がECMAの標準規格になる
http://jp.techcrunch.com/2014/07/09/20140708googles-dart-language-is-now-an-official-ecma-standard/

JavaScriptはどうなるんです?
182Name_Not_Found:2014/07/09(水) 11:01:00.46 ID:???
IEはどうするんです?
183Name_Not_Found:2014/07/09(水) 13:29:07.29 ID:???
>>177
明らかにサーバサイドの問題だから該当言語のスレに行くべし
184Name_Not_Found:2014/07/09(水) 13:44:51.20 ID:???
ajaxはサーバサイドじゃねーから。
サーバにアクセスする部分はサーバクライアント両方の要素があるのは当然のことだ
185Name_Not_Found:2014/07/09(水) 13:50:33.86 ID:???
>>176
処理の間ボタンをdisabledやreturn falseにしておけば?
186Name_Not_Found:2014/07/09(水) 19:20:42.88 ID:???
>>184
フィイル出力はサーバサイドの処理
187Name_Not_Found:2014/07/09(水) 19:47:26.35 ID:???
そもそも、TCP/IPはエラー補正機能が付いているけど、どういう原理でデータ損失が起きる事を想定してるの?
サーバ側からすればAjaxだろうが、form送信だろうが変わらないけど、Ajax特有の問題がどうやって発生するの?
188Name_Not_Found:2014/07/09(水) 21:34:56.41 ID:???
>>177
その辺はWebサーバがうまいことやってくれんかね
189Name_Not_Found:2014/07/09(水) 21:56:15.09 ID:???
複数のオブジェクトのデータを送る時、
何も考えずにループで送り、サーバ側も順次それをサーバに書き込んでいくと
クライアントサイドのロジックにデータの保全性が依存してしまう
それを避けるためにどうしてるかという問題
TCP/IPの話なんぞしてない
ど素人は寝とけ
190Name_Not_Found:2014/07/09(水) 22:16:08.71 ID:???
どこから、「複数のオブジェクトのデータを送る」って話になったんだ?
一つの巨大なデータの話だろ。
191Name_Not_Found:2014/07/09(水) 22:26:47.64 ID:???
ブラウザが途中で落とされた時とかいう話をしてるけどさ、
これってネットワークが途中で切れたりした時にも当てはまるんだよ。
だからAjaxの話とか関係なく、いままではどうしていたの?って話。

一般的なシステムの場合、データが全て届いてから処理が開始される。

もしストリーミングで受信するタイプの場合、
つまり、データが全て届かなくても処理するタイプの場合ね。
そういうものは、トランザクション処理でも仕込んでおいて、
データが完了しなければ、処理をなかったことにすればいい。
192Name_Not_Found:2014/07/09(水) 22:56:40.94 ID:???
分かり切った一般論を抜かし出す奴なんなんだよ
具体的にどうしてるのかって話
書いたことないなら黙っとけ
193Name_Not_Found:2014/07/09(水) 22:59:28.82 ID:???
>>192
お前のレスになんか意味があるのか?

分かりきった話なのに、其の質問をしているんだから、
そいつには、わかってないんだろう?
その答えが、分かりきったものになるのは当たり前の話だ。

なぜ分かりきった一般論を書いてはダメなのだ?
194Name_Not_Found:2014/07/09(水) 23:00:08.73 ID:???
>>190
お前がアスペなだけ
一つのデータなら整合性は問題にならないんだから
こんな疑問が出るわけもない
195Name_Not_Found:2014/07/09(水) 23:01:21.23 ID:???
>>193
お前書いたことあんの?
ないならお前には聞いてないから黙っとけ
お前が出る幕じゃないんだよ
196Name_Not_Found:2014/07/09(水) 23:11:26.57 ID:???
>>195
あるから、黙る必要はないなw
197Name_Not_Found:2014/07/09(水) 23:12:40.98 ID:???
>>194
> 一つのデータなら整合性は問題にならないんだから
なる場合もある。無知は黙ってろ
198Name_Not_Found:2014/07/09(水) 23:20:38.82 ID:???
複数行のデータとかループして送るとか言ってるから、
行単位でPOSTするつもりなんだろwwwwwwww
199Name_Not_Found:2014/07/09(水) 23:27:51.70 ID:???
> 177 名前:Name_Not_Found[sage] 投稿日:2014/07/09(水) 09:48:20.58 ID:???
> 複数の行で構成された巨大なデータをajaxでサーバに送信する場合、

元々の質問者はループなんて言ってないな。

ループって言い出したのはこいつか
> 189 名前:Name_Not_Found[sage] 投稿日:2014/07/09(水) 21:56:15.09 ID:???
> 複数のオブジェクトのデータを送る時、
> 何も考えずにループで送り、サーバ側も順次それをサーバに書き込んでいくと


まったく、なんで複数のオブジェクトとかいう話を
しだいているんだろうこいつ。馬鹿じゃんw
200Name_Not_Found:2014/07/10(木) 06:29:20.51 ID:???
なんでsleepがなかったりと、基本的にノンブロッキングな仕様なんでしょうか?
ブラウザに組み込むために必要な仕様なんでしょうか?
201Name_Not_Found:2014/07/10(木) 08:41:51.69 ID:???
必要ないからです
202Name_Not_Found:2014/07/10(木) 08:47:21.53 ID:???
複数データを送る話とは思えないが、仮にそうだとしても不整合が起きるのはファイルをロックせずに多重書き込みする場合
明らかにサーバの問題だろう
203Name_Not_Found:2014/07/10(木) 08:53:12.25 ID:???
プログラム板の次スレ
荒らしを嫌う人はこちらにどうぞ

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
204Name_Not_Found:2014/07/10(木) 09:54:59.85 ID:???
>>202
ファイルてw
そんなレベルの話は誰もしてねーよ
205Name_Not_Found:2014/07/10(木) 09:57:03.41 ID:???
通信が途絶したらちゃんと失敗するように、
複数のオブジェクトをひとつにまとめてPOSTすればいいだけでした
ありがとうございました
206Name_Not_Found:2014/07/10(木) 10:29:31.96 ID:???
iOSはピンチでスムーズに拡大縮小できますが
PCのブラウザであのレベルの拡大縮小処理って出来ませんか?
207Name_Not_Found:2014/07/10(木) 13:44:51.04 ID:???
>>205
しっかりと切り分けしてから質問してくれ
いろいろ酷すぎる
208Name_Not_Found:2014/07/10(木) 13:59:12.19 ID:???
なんだよ >>198 で正解じゃないか >>199 がバカすぎwwwwwwwwwwwwww
209Name_Not_Found:2014/07/10(木) 14:09:32.63 ID:???
この場合、責められるべきは曖昧な質問をした質問者だろう
当たっていたのは結果論にすぎない
で、やはりというべきか、JavaScriptは関係なかったな
210Name_Not_Found:2014/07/10(木) 14:30:40.27 ID:???
>>199がおバカなのは質問の意図を当てられなかったからじゃなくて可能性を完全否定しちゃってることだね
>>177の質問からすれば>>198は当然考慮すべき事だろ

そしてAjaxによるデータ送信に関連する注意点だからJavaScriptが関係無いわけじゃないね
211Name_Not_Found:2014/07/10(木) 14:30:59.17 ID:???
データをまとめるのはJavaScriptなので関係ありますが?
恥をかいたからといって変な突っかかり方する人の回答は必要ありません
212Name_Not_Found:2014/07/10(木) 14:33:56.37 ID:???
スクロールが終端まで行ったことを検出するにはどうやればいいですか?
213Name_Not_Found:2014/07/10(木) 14:57:20.42 ID:???
>>212
scrollTopとボックスの高さを足して
中身の高さと比較するとか
214Name_Not_Found:2014/07/10(木) 16:00:24.02 ID:???
出来ました
ありがとうございました
215Name_Not_Found:2014/07/10(木) 18:56:36.95 ID:???
>>211
今後は曖昧に質問せずに必要な情報を全部出してね
216Name_Not_Found:2014/07/10(木) 19:18:36.54 ID:???
>>215
曖昧とは思いませんが
217Name_Not_Found:2014/07/10(木) 19:38:06.57 ID:???
バカには無理
218Name_Not_Found:2014/07/10(木) 19:41:52.20 ID:???
馬鹿には回答は無理ってことですね
分かります
219Name_Not_Found:2014/07/10(木) 19:45:06.69 ID:???
わかってないな
220Name_Not_Found:2014/07/10(木) 19:48:40.43 ID:???
くやしいのうw
221Name_Not_Found:2014/07/10(木) 19:50:26.05 ID:???
www
222Name_Not_Found:2014/07/10(木) 20:08:31.89 ID:???
>>216
必要な情報を後出しせずに初めから全て出してね
223Name_Not_Found:2014/07/10(木) 20:08:55.53 ID:???
ID無しはやはり荒れるのでこちらを使用するのがおすすめです。

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
224Name_Not_Found:2014/07/10(木) 20:12:10.01 ID:???
ローカルルールがなければそれが一番だよなあ
というか、ここもID強制してくれ >運営
225Name_Not_Found:2014/07/10(木) 22:47:08.92 ID:???
>>223
宣伝するためだけに戻ってきたのか?w

お前はもうそっちに行ってしまって、
あれるかもしれないここは、見てないと思いっていたが。
226Name_Not_Found:2014/07/10(木) 23:00:06.88 ID:???
>>223
向こうでもweb板でやれって言われてんじゃねーか
227Name_Not_Found:2014/07/11(金) 01:11:54.19 ID:???
そもそもIDの有無なんて荒れの抑制に本質的な意味はないからな
プログラマーらしからぬ非論理的な思考
228Name_Not_Found:2014/07/11(金) 03:37:20.68 ID:???
>>206
Win8, IE10で、
Ctrl + で拡大、Ctrl - で縮小できる
229Name_Not_Found:2014/07/11(金) 04:41:02.87 ID:???
例えばオセロゲームをhtml5のcanvasで作ろうとします
(1)1ターンごとにcanvas全部真っ白後にマスから何から全部再描画
(2)1ターンごとに該当マスだけ消して描画
処理の重さとかはまず置いといてどちらがカッコイイですか
230Name_Not_Found:2014/07/11(金) 04:49:29.12 ID:???
1だと毎回余計な処理を見せられてうざい
231Name_Not_Found:2014/07/11(金) 04:56:23.98 ID:???
>>227
あるだろ
232Name_Not_Found:2014/07/11(金) 05:18:34.76 ID:???
描画処理を見せたくないならダブルバッファリングすればいいかな
233Name_Not_Found:2014/07/11(金) 05:31:26.86 ID:???
パーティクル的なアニメーションだと
(1)全て再描画
  無難、メンテしやすい
(2)処理の分だけ再描画
  canvas一枚でやると描画の重なるとこが面倒
(3)1ドット毎に最小のcanvas要素を用意
  (1)、(2)の中間
  canvas要素は方形なので要素同士の重複部分が無駄
大きくわけてこれくらいか
234Name_Not_Found:2014/07/11(金) 05:40:12.10 ID:???
まあフレーム毎の処理なら再描画+レイヤー要素の一択だと思うけど
235Name_Not_Found:2014/07/11(金) 08:37:25.05 ID:???
jsってc++のバックサーフェスみたいなのあります?
236Name_Not_Found:2014/07/11(金) 10:25:13.43 ID:???
(new Hoge()).method()
みたいな書き方していいですか?
237Name_Not_Found:2014/07/11(金) 12:18:03.35 ID:???
new Date().getTime()
とかよくやるし良いんじゃね
238Name_Not_Found:2014/07/11(金) 12:34:06.04 ID:???
いつも思うが、コード出して質問しろよ
常時いつも必ず良い書き方なんてあるわけないだろ
239Name_Not_Found:2014/07/11(金) 14:09:04.94 ID:???
>>1
>出来るだけサンプルコード
だぞ
>出来るだけ
しかも
>サンプルコード
本気コードじゃないからな
初心者だとコードそのまま出すことはできても
端折ってサンプル考えられるわけがない
簡単なものは”出来るだけ”を心がけて出してるはず
240Name_Not_Found:2014/07/11(金) 14:18:39.08 ID:???
>>239
2行目を読んでから反論しろよ
ケースバイケースという言葉を知らんのか
241Name_Not_Found:2014/07/11(金) 15:06:01.86 ID:???
2行目てどこの2行目だよ
(6)の2行目のことなら
>問題の事象が再現されること
で、>確認してください
って書いてあるじゃん

>問題の事象が再現されること
ようにサンプルコードを掲示してくださいって意味じゃないぞ
242Name_Not_Found:2014/07/11(金) 15:09:16.72 ID:???
そして>常時いつも必ず良い書き方なんてあるわけないだろ
のことならそれこそ(6)だが
243Name_Not_Found:2014/07/11(金) 15:18:40.66 ID:???
>>237
カッコはいらないのですか?
244Name_Not_Found:2014/07/11(金) 15:25:46.42 ID:???
試せば分かる事聞くな
245Name_Not_Found:2014/07/11(金) 15:27:53.06 ID:???
お前が試して答えろって意味ですが?
246Name_Not_Found:2014/07/11(金) 15:29:30.42 ID:???
分かった試してくるから3時間待ってろ
247Name_Not_Found:2014/07/11(金) 15:30:14.91 ID:???
カッコつけた方が一般的ですかって意味だろたぶん
248Name_Not_Found:2014/07/11(金) 15:30:30.56 ID:???
試したところ問題ないようですが
何故カッコがいらないのか良く分かりません
new演算子は.演算子よりも優先されるのかなぁ?
249Name_Not_Found:2014/07/11(金) 15:40:03.19 ID:???
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

これによるとnew演算子とメンバ演算子の優先順位は同じでした
なので、先に書かれたnewが最初に実行されるんですね
ありがとうございました
250Name_Not_Found:2014/07/11(金) 15:49:27.94 ID:???
間に関数呼び出しの()があるけど、これの優先順位はメンバやnewより順位低くね?
new Date.getTime() だとエラーになるから (new Date).getTime() としなきゃならないしここらへんどうなってんの
251Name_Not_Found:2014/07/11(金) 15:55:39.51 ID:???
newに()を付けない書き方なんて許されてるの?
はじめて見たよ
252Name_Not_Found:2014/07/11(金) 16:06:16.81 ID:???
>>251
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new
> new constructor[([arguments])]
()は関数呼び出しではなくnew演算子の一部で省略可能
253Name_Not_Found:2014/07/11(金) 16:08:55.60 ID:???
そうなんだ
それなら()がない時だけエラーになるのは何か変な感じするね
254Name_Not_Found:2014/07/11(金) 18:05:13.90 ID:???
別に構文エラーじゃないでしょ
255Name_Not_Found:2014/07/11(金) 21:43:41.68 ID:???
>>253
new演算子の対象が違う
256Name_Not_Found:2014/07/11(金) 22:05:20.29 ID:???
なんで対象が変わるんだ?
257Name_Not_Found:2014/07/11(金) 22:20:51.55 ID:???
new Date() と new Date は同じもの返すけど、その右に . とか [] つけたとき
new Date()の場合は、new Date()の結果に . か [] が結合するけど、
new Dateの場合は、Dateだけが . か [] に結合しちゃうね?
258Name_Not_Found:2014/07/11(金) 23:07:23.93 ID:???
>>256
() が省略されたから
>254とエラーコンソールを読めばわかる
259Name_Not_Found:2014/07/11(金) 23:42:03.70 ID:???
>>257
そのりくつはおかしい
new演算子とメンバ演算子の優先順位は同じなんだから、
素直に実行されるならnewされてからメソッドが呼び出されるはず
260Name_Not_Found:2014/07/12(土) 00:16:07.12 ID:???
>>258-259
new Date.getTime() と new Date().getTime()だと前者でエラーになるのは何でなんだよ
261Name_Not_Found:2014/07/12(土) 00:28:22.30 ID:???
()演算子が入らない場合はメンバ演算子が優先される
としか思えないな
262Name_Not_Found:2014/07/12(土) 00:29:02.77 ID:???
>>259
実際にIE/Firefox/GoogleChromeで試すと >>257 の挙動だから何故?って話
263Name_Not_Found:2014/07/12(土) 00:30:26.13 ID:???
メンバ演算子の方が強いから
264Name_Not_Found:2014/07/12(土) 00:46:50.35 ID:???
メンバ演算子は右から左
new演算子は左から右
「右から左」と「左から右」が戦ったら「右から左」が勝つってことじゃないの?
265Name_Not_Found:2014/07/12(土) 00:51:30.95 ID:???
優先順位決定のアルゴリズムをJavaScriptで書いてもらえませんか?
266Name_Not_Found:2014/07/12(土) 01:27:04.64 ID:???
>>259
new 演算子の対象は MemberExpression であって、優先順位は全く関係ない
優先順位で考える前に Syntax で考えるべき
http://es5.github.io/#A.3
267Name_Not_Found:2014/07/12(土) 01:27:32.70 ID:???
この辺が原因かな?

11.2 Left-Hand-Side Expressions
MemberExpression :
 PrimaryExpression
 FunctionExpression
 MemberExpression [ Expression ]
 MemberExpression . IdentifierName
 new MemberExpression Arguments
NewExpression :
 MemberExpression
 new NewExpression

Arguments付きのnewはメンバ演算子と同等だけど、Arguments無しのnewは弱い感じ
268Name_Not_Found:2014/07/12(土) 01:37:13.40 ID:???
そもそも、new Identifier Arguments のように考えるのがおかしい
初めから NewExpression に含まれているのだから
前提となる Syntax を勝手に解釈するから矛盾が生まれる
269Name_Not_Found:2014/07/12(土) 02:12:06.69 ID:???
Left-Hand-Sideって何て訳すの?左手側?
270Name_Not_Found:2014/07/12(土) 02:15:46.00 ID:???
左辺
271Name_Not_Found:2014/07/12(土) 02:27:08.59 ID:???
left-sideでいいじゃん
handいらねー
272Name_Not_Found:2014/07/12(土) 02:33:06.34 ID:???
左方向って意味もあるんじゃないかな
new new Hoge なら右から左方向に計算しないとnewをnewすることになってしまう
273Name_Not_Found:2014/07/12(土) 05:44:25.66 ID:???
>>267の文法が全てだけど

演算子の優先順位 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

を見ると一目瞭然だよ
new より . [] の方が優先される (結合される方向も違う)

それを念頭におけば↓って解釈出来て>>257と同じになる
new Hoge.hoge[0]() → new ((Hoge.hoge)[0])()
new Hoge().hoge → (new Hoge()).hoge
new Hoge.hoge → new (Hoge.hoge)
274Name_Not_Found:2014/07/12(土) 05:58:38.21 ID:???
>>273
そのMDNの表じゃ、引数つきのnewと引数無しのnewの優先度の違いが説明できないよね?
275Name_Not_Found:2014/07/12(土) 06:11:59.82 ID:???
単純にnewより.が優先されるなら、
new Hoge().hoge → (new Hoge()).hoge じゃなくて、
new Hoge().hoge → new (Hoge().hoge) こうなるべきだよね?でもそうならない
276Name_Not_Found:2014/07/12(土) 06:29:58.21 ID:???
>>274
書いてて気付いたが、new は new Hoge と new Hoge() の2つの書き方(文法)が
あるってだけの問題な気がしてきた

>>275
まず . の右と左に分けると new と () の問題になって new が優先されて
new は () までが構文だから (new Hoge()).hoge じゃないのかな?

緊急地震速報で起こされてから寝れない…
277Name_Not_Found:2014/07/12(土) 08:13:33.88 ID:???
>>273
その表ではメンバ演算子とnew演算子は同じ優先順位1じゃん
278Name_Not_Found:2014/07/12(土) 08:16:05.91 ID:???
>>275
() が付いているから
Hoge()より new Hoge のほうが優先されるのでは
279Name_Not_Found:2014/07/12(土) 08:22:17.53 ID:???
同じ優先順位の左結合性と右結合性が衝突した場合、
右結合性が優先されるんだろう
左右どっちかを優先させないと決定できないから、
ドキュメントのどこかに書いてあるはず
はい論破
280Name_Not_Found:2014/07/12(土) 08:38:18.85 ID:???
難しく考えなくても、>>267の構文規則だけで>>257の挙動になることは十分説明できてるんだよ

あえて優先順位をつけるなら
newには引数付きのコンストラクタをとるものと引数無しのコンストラクタをとるものの2種類存在する
引数付きの場合の優先順位は>>273の表のとおり1番目になる
引数無しの場合の優先順位は>>273の表における2番目になる
こんな感じ
281Name_Not_Found:2014/07/12(土) 09:32:28.59 ID:???
その構文規則が「日本語でOK」なレベルだろ
何を書いてるのか分からん
282Name_Not_Found:2014/07/12(土) 10:22:16.31 ID:???
>>281
優先順位が
()有りのnew > メンバ演算子 > ()無しのnew
って事
283Name_Not_Found:2014/07/12(土) 10:22:30.04 ID:???
>>281
>>266で仕様書リンクが出てるからそちらを読むべき
読み方がわからないなら RFC 2234 を読む
http://www.t-net.ne.jp/~cyfis/rfc/format/rfc2234_ja.html
というか、「分からなくて当然」という態度で構えるなよ
284Name_Not_Found:2014/07/12(土) 10:26:45.28 ID:???
ニュアンスでわかるだろ
285Name_Not_Found:2014/07/12(土) 10:45:09.69 ID:???
つまり優先度以前に構文解析で「new Hoge()」「.hoge」に分割されるって事か
分かってみれば凄いシンプルだった
286Name_Not_Found:2014/07/12(土) 10:50:25.93 ID:???
JavaScriptを書くのにアブンフを分からないといけないのですか?
287Name_Not_Found:2014/07/12(土) 11:01:47.29 ID:???
曲がりなりにも「JavaScript を自ら学ぶ人のための質問スレ」なんだから参考URLを呼んでから判断しようぜ
>>266を読んでない人が多すぎる
288Name_Not_Found:2014/07/12(土) 11:13:25.51 ID:???
>>286
そのぐらい自分で判断しろよ
ABNFを学ばなければECMAScriptを理解できない理屈もわからんのか
289Name_Not_Found:2014/07/12(土) 11:38:23.99 ID:???
>>288
じゃあその理屈を説明してみろよ
アンブフなんて聞いたこともないが普通にJS使ってるしプゲラ
290Name_Not_Found:2014/07/12(土) 11:55:24.55 ID:???
>>266だって読んでないだろ
newの対象はNewExpressionにも成り得る
291Name_Not_Found:2014/07/12(土) 12:21:52.70 ID:???
暗部をしらないだと?
292Name_Not_Found:2014/07/12(土) 13:24:26.59 ID:???
>>287
そうなんだよね

それに最近は自分でゴリゴリ書く人よりもjQuery等のライブラリの質問が多くなった
純粋にJavaScriptのスキルアップや勉強をする人が減ったのかな
それとも今はjQueryを使うのが一般的なのかな(古い人間でゴメン
293Name_Not_Found:2014/07/12(土) 13:38:51.00 ID:???
>>292
JavaScriptは普通に勉強するでしょ?

勉強しなくなったのはブラウザ標準のDOM APIの方。
これはJavaScriptの範囲ではない。

DOM APIを勉強することを、JavaScriptの勉強だと
思ってるのならそれは間違っている。

DOMよりもjQueryの方が優れているのはあきらなかので
(ブラウザ間の互換性の話じゃなくて、機能的に優れている)
今の人は、JavaScript + jQueryを勉強している。
294Name_Not_Found:2014/07/12(土) 13:45:51.05 ID:???
都合とかは関係なく好みの問題だがjqueryは好きになれない
295Name_Not_Found:2014/07/12(土) 13:47:03.99 ID:???
>>294
好みの問題は置いといて、好きになれない理由を
技術的な観点から聞かせて欲しい。
296Name_Not_Found:2014/07/12(土) 13:48:40.26 ID:???
>>295
クライアント側に動かしてもらうコードは、可能な限り極限まで少なく小さくあるべき、という考え
297Name_Not_Found:2014/07/12(土) 13:51:24.88 ID:???
>>296
つまり、開発速度よりも、実行速度を気にしてるってこと?
298Name_Not_Found:2014/07/12(土) 14:01:31.07 ID:???
そんなこと言ってられるのは大したもの作ってないから
299Name_Not_Found:2014/07/12(土) 14:08:48.54 ID:???
この的外れ感
300Name_Not_Found:2014/07/12(土) 14:10:12.03 ID:???
>>298
「たいしたもの」とか曖昧な言い方じゃなくて具体的な
分岐点を示さないとたんなる思い込みでしか無いからなぁ。

ファイルサイズ=実行速度でもないし、gzipでの転送速度33.6KBだったけど、
これ1画像よりも小さいサイズだったりするし、
ネットワーク転送速度も速くなって、パソコンの処理速度も速くなってるんだよね。
こっちはどんどん性能があがってるけど、人間の開発速度は上がらないからね。

はるか昔は1クロックでも少なく、1バイトのメモリでも小さくって
そういうことを気にしていた時代があったけど、
どんどん時代が進むために、意味がなくなってるのは明らかだよ。

可能な限りとか極限までとかいうのは、危険な思想だな。
可能な限り、極限まで、自分で書くコードを小さくすることを考えれば
”トレードオフ"という答えにしかならないはずなんだが。

jQueryを使う使わないとかそういう話ではなく、
トレードオフを無視する考え方は間違いだよ。
301Name_Not_Found:2014/07/12(土) 14:11:31.10 ID:???
薄っぺらな文章を長々と書くなボケ
302Name_Not_Found:2014/07/12(土) 14:12:22.12 ID:???
文句ばっかw
そういうつぶやきがしたかったらTwitterでやってろよw
303Name_Not_Found:2014/07/12(土) 14:18:02.52 ID:???
オブジェクトあるいはarrayが空かどうかを調べるには
lodashの_.isEmptyを使うのがベストですか?
304Name_Not_Found:2014/07/12(土) 14:20:20.81 ID:???
>>303
空の定義にもよる。変数がArrayであることが保証されているのであれば
.lengthを使うほうがいいだろう。

だけど変数がArrayとは限らずオブジェクトや空文字などが入る場合があるのなら
_.isEmptyを使用した方がいい。
305Name_Not_Found:2014/07/12(土) 14:21:12.24 ID:???
>>291
まめぶ汁推しの人だろ。
306Name_Not_Found:2014/07/12(土) 14:29:41.81 ID:???
arrayならわざわざ「オブジェクトあるいはarray」とは書きません
ではisEmptyを使います
ありがとうございました
307Name_Not_Found:2014/07/12(土) 15:04:09.41 ID:???
オブジェクトって書いてあるのを見逃してたよ
すまんすまん。
308Name_Not_Found:2014/07/12(土) 15:08:50.24 ID:???
問題は new Hoge[10] が Hoge を10個作る訳じゃないことだな
みんな一度はオブジェクトを複数作る方法を調べた事があるはず
309Name_Not_Found:2014/07/12(土) 16:03:35.48 ID:???
>>289
ABNFを読めなければSyntaxを読めないだろうが
ABNFは仕様書では一般的に使われている書式で仕様書を読むなら必須

> アンブフなんて聞いたこともないが普通にJS使ってるしプゲラ
ABNFを理解できなくても何となく使えれば良いなら不要だろうよ
文法を理解しなくても時間をかければ、トライアンドエラーで解決できるだろうからな(理解せずとも使えればいいというタイプ)
だが、上の質問者のように文法を理解できなくて「なぜ?どうして?」と一生他人に音部に抱っこするつもりなら初めから理解しておけ
310Name_Not_Found:2014/07/12(土) 16:15:42.93 ID:???
日本語の文法も大事
311Name_Not_Found:2014/07/12(土) 16:39:38.38 ID:???
日本語の仕様書を読みたいのでアンブフの場所を教えてください
312Name_Not_Found:2014/07/12(土) 16:50:46.86 ID:???
勉強といっても、それが問題になる場面その頻度を考えるのが大事だと思うんだよ
開発効率も勉強効率も一緒
313Name_Not_Found:2014/07/12(土) 17:36:45.25 ID:???
フガフフってなんですか?
314Name_Not_Found:2014/07/12(土) 19:59:25.96 ID:???
来週もまた見てくださいね?
初めて聞いたわ
jQuery(〜)は〜の中身を判断してそれぞれの処理を行うってことですか?
317Name_Not_Found:2014/07/12(土) 23:46:33.80 ID:???
バッカスナウア記法って酒神のバッカスから来てるんです?
318Name_Not_Found:2014/07/13(日) 00:32:57.34 ID:???
ABNFについて簡潔に説明して下さい
319Name_Not_Found:2014/07/13(日) 01:40:54.98 ID:???
ってかこれ役に立つの?
320Name_Not_Found:2014/07/13(日) 01:52:52.84 ID:???
酒バッカスなう
321Name_Not_Found:2014/07/13(日) 01:57:44.19 ID:???
>>319
そう思うよな
JavaScriptと関係なさ過ぎww
322Name_Not_Found:2014/07/13(日) 02:16:47.47 ID:???
オブジェクトにコールバック関数を渡せるようにしたら便利ですが
コールバック関数を受け取って自分をbindして実行するメソッドは標準ではないのでしょうか?
323Name_Not_Found:2014/07/13(日) 02:22:58.94 ID:???
>>319
プログラミング言語は一般的に以下の処理がされる
字句解析 → var hoge = 1.0; を var|hoge|=|1.0|= に分割する 正規表現が使われる
構文解析 → new Hoge[1] → new|Hoge|[|1|] が正しい構文か判定する BNF(ABNF)が使われる
意味解析 → オブジェクトに足し算するような意味的に正しくないものをエラーにする
中間コード生成 → 機械語生成など

これから分かる事は、JSONやHTMLを自前で解析するには正規表現では基本的に無理だという事
よく初心者はやりがちだが、ムリクリやれない事もないがスマートに実装するには
BNF(ABNF)の知識とライブラリなどが必要
324Name_Not_Found:2014/07/13(日) 02:58:07.97 ID:???
なんか凝り固まってるのがいるが、ここお前の演説会場じゃねーから
ブログでやってろ
325Name_Not_Found:2014/07/13(日) 03:04:58.88 ID:???
技術的話題だから問題ない
326Name_Not_Found:2014/07/13(日) 03:46:56.56 ID:???
このスレで論破wとかしたいなら必須の知識だな
じゃないと>>279とかみたいに恥ずかしいことになる
327Name_Not_Found:2014/07/13(日) 03:57:09.60 ID:???
いや全然恥ずかしくないが?
実際にドキュメントに書いてあったじゃん
はい論破
328Name_Not_Found:2014/07/13(日) 04:29:11.30 ID:???
>>327
まだ理解できてないじゃんwww恥ずかしいのうwww
329Name_Not_Found:2014/07/13(日) 04:47:19.21 ID:???
JSもアブンフで定義されてるんですよね
ってことはアブンフを使ったら新しい言語を作れるってことですか?
330Name_Not_Found:2014/07/13(日) 04:51:30.38 ID:???
ネタか?
331Name_Not_Found:2014/07/13(日) 05:09:52.19 ID:???
>>322
具体的に
332Name_Not_Found:2014/07/13(日) 05:10:40.27 ID:???
>>330
ネタじゃねーよカス
333Name_Not_Found:2014/07/13(日) 05:12:03.56 ID:???
>>331
十分具体的だと思います
334Name_Not_Found:2014/07/13(日) 05:13:01.02 ID:???
新しい言語つくるときにANBFで言語仕様を定義しとけば
構文解析部を完全自力で作る必要はなくなるな
パーサージェネレータでぐぐれ
335Name_Not_Found:2014/07/13(日) 05:23:37.13 ID:???
ありがとうございました
336Name_Not_Found:2014/07/13(日) 05:59:18.55 ID:???
>>333
オブジェクトにコールバックて
どういうシーンを想定してんのかなあと
337Name_Not_Found:2014/07/13(日) 08:41:11.90 ID:???
ABNF理解できなくて見当違いの談義に花を咲かせた連中がいるというのに、「JavaScriptを書くのにアブンフを分からないといけないのですか?」と質問する精神がわからん
338Name_Not_Found:2014/07/13(日) 08:56:38.61 ID:???
>>336
そもそも、[[Call]] を持ってなkれば call 出来ないし、callback とはいわないよなあ
タイミングがわからん
339Name_Not_Found:2014/07/13(日) 09:00:28.31 ID:???
>>337
知らないことは判断のしようがねーだろ
プログラマーとは思えないほど非論理的だな
340Name_Not_Found:2014/07/13(日) 09:01:13.75 ID:???
>>338
日本語でOK
341Name_Not_Found:2014/07/13(日) 09:04:55.73 ID:???
>>339
知らないから無知を晒したんだろ
>>266で知る手段を持ちながらも理解できなかった

今はABNFという理解する手段を知ったんだから、覚えれば良いだけだろ
覚える手段がありながら「覚える必要がありますか?」とか頓珍漢な事聞いてるんじゃねえって話
342Name_Not_Found:2014/07/13(日) 09:09:23.51 ID:???
>>340
関数でなければ関数呼び出しできないからコールバックとはいわない
タイミングはいつ?
343Name_Not_Found:2014/07/13(日) 09:16:43.99 ID:???
まさか単にFunction.prototype.call()がしたいわけじゃないよね?
344Name_Not_Found:2014/07/13(日) 09:37:07.99 ID:???
こういうやつのことじゃね? まあこれはイベントだけだけど

var obj = {
handleEvent: function () {
console.log('click');
}
};
elem.addEventListener('click', obj);
345Name_Not_Found:2014/07/13(日) 09:37:39.73 ID:???
>>333
全然具体的じゃないです
346Name_Not_Found:2014/07/13(日) 10:08:10.80 ID:???
コールバックはコールバックだよ
そんな基本的なことまで言わせんな
347Name_Not_Found:2014/07/13(日) 10:18:25.86 ID:???
>>346
そんなことは聞いてない
348Name_Not_Found:2014/07/13(日) 10:20:11.38 ID:???
>>341
いやそれ見ても何が言いたいか分からんし。
とりあえずABNFってのがあるんだなってことだけは分かったけど
お前の言ってることがどの程度的を射ているのかはまだ分からん
349Name_Not_Found:2014/07/13(日) 10:21:26.96 ID:???
>>347
アスペは黙ってじっとしとけ
350Name_Not_Found:2014/07/13(日) 10:26:29.49 ID:???
new Hogeと
new Hoge()の違いなんて、現実的には問題になることはない
そのどうでもいい問題に対して「これ読めや」って言ってクソ長いドキュメント持ってくる奴は
知識はあるのかもしれないが頭は悪い
なんでどうでもいい問題のためにクソ長いドキュメント読まないといけないんだよ
351Name_Not_Found:2014/07/13(日) 10:28:32.68 ID:???
ちゃんと読めばいい部分のリンクを張ってるのに
何いってんだこいつ
352Name_Not_Found:2014/07/13(日) 10:28:47.36 ID:???
どうでもいいと思ってるのに、
なぜわざわざ話に加わろうとするんだ
353Name_Not_Found:2014/07/13(日) 10:30:48.37 ID:???
>>348
ログは全て読んでる?
ABNFの日本語仕様書リンクも貼られていて、それを読んでABNFを理解すれば読めるはずだけど
無知を自覚しておきながら「知らないことは判断のしようがねーだろ」はないと思うよ
「どうやって学べばいいかわからない」とか「ここまで読んだが、この文章が分からない」ならまだわかるけどね
ここはJavaScript を自ら学ぶ人のための質問スレッドだからね
354Name_Not_Found:2014/07/13(日) 10:33:17.99 ID:???
質問者は「どうでもいい」と思ってないから質問するわけだが
355Name_Not_Found:2014/07/13(日) 10:36:47.61 ID:???
>>349
アスペ質問者は黙っとけ
356Name_Not_Found:2014/07/13(日) 10:41:53.10 ID:???
>>346
この人は誰にいってるんだろ?
>>345に対してかと思ったけど、コールバックの概念説明は「具体的な説明」ではないし…
357Name_Not_Found:2014/07/13(日) 10:45:57.65 ID:???
こんなのが()でくくらなくても書けるようにあんな構文規則にしてあるんだなあとちょっと感心した
new abc.def.ghi().jkl.mno.pqr.stu()
演算子の優先順位表だけじゃ説明できないから
原典の理解は大切だなと再認識したよ
358Name_Not_Found:2014/07/13(日) 11:29:12.52 ID:???
「ABNFの日本語仕様書リンクも貼られていてって」
それがくそ長いっての
なんかナチュラルに馬鹿っぽいな
359Name_Not_Found:2014/07/13(日) 11:29:56.55 ID:???
>>357
本当に分かったならちょっと説明してみてくれ
360Name_Not_Found:2014/07/13(日) 11:31:27.67 ID:???
「ドキュメントを貼る」以外の方法で説明できる奴が一人もいないのは何故なんだ
抽象化能力ゼロなの?
361Name_Not_Found:2014/07/13(日) 11:37:36.84 ID:???
>>356
お前だよカス
362Name_Not_Found:2014/07/13(日) 11:39:45.34 ID:???
イイゾイイゾwww
理解できないクヤシサが伝わってきてとてもとても気持ちいいですwww
363Name_Not_Found:2014/07/13(日) 11:43:09.95 ID:???
>>361
>>356から参加したんだけど、あなたは予知能力者なの?
364Name_Not_Found:2014/07/13(日) 11:43:55.22 ID:???
()でくくらなくていい・くくらなきゃいけないのはそれぞれこういうケースだ
興味があればこれ読めば規則が書いてあるよ、……とこれだけで終わっても別に良い

ところでこの構文規則、必然性や必要性ってあるの?
「なぜこうなってるか」が全然見えない
365Name_Not_Found:2014/07/13(日) 11:49:19.96 ID:???
>>358-360
こういうことか

「どうでもいい質問だが、俺様が気になるので理解してやる
ただし、俺様は長文を理解できない
初心者でもわかるように三行で説明しろ」

諦めろ
366Name_Not_Found:2014/07/13(日) 11:52:14.55 ID:???
やっぱ説明できないのか
知識は簡単に集められるけど抽象化するのは高度な知性が必要だからなプゲラ
367Name_Not_Found:2014/07/13(日) 11:57:03.39 ID:???
>>364
もしこの捻った構文規則が無かったら
>>357の new abc.def.ghi().jkl.mno.pqr.stu() みたいに書くと
newが取るコンストラクタは abc か、abc.def.ghi().jkl.mno.pqr.stu()全体か、どっちにしかならないんだよね
でも直感的には abc.def.ghi がコンストラクタであって欲しいよね?
368Name_Not_Found:2014/07/13(日) 11:58:10.73 ID:???
知ってるが、おまえの態度が気に入らない(AA略
369Name_Not_Found:2014/07/13(日) 12:01:48.08 ID:???
理解できない人は文脈自由文法とか勉強してきてくださいよ
ある程度その辺の経験つんでると>>266のリンク先を見るまでもなく
>>267の抜き出した部分を見ただけでなんとなく直感的に理由に気づける
実際そのとおりなのか確かめるには>>266のリンク先きっちり読まないといけないと思うけど
メンドクサイし、実際にブラウザで試してみると得られた直感的なイメージどおり動いてくれるんで
自分的にはそれでいいです
370Name_Not_Found:2014/07/13(日) 12:09:00.12 ID:TENJgKA8
コロコロID変わる身だけどID出しておく

>>367
どうあって欲しいかは、個人的意見でいうと、むしろ対象abcか全体かのどちらかかなあ
直感的には無名関数の書き方が頭にチラつく

その三者のいずれであるかは、仕様策定者(orグループ)の好みの問題なのか
歴史的経緯があるのか、それとも実用的な理由があるのか(こうじゃないとパーサの動き的に困るとか、開発効率に関わるとか)
どれなのか、ってところがわからない
※なぜこれが知りたいかというと、類似問題に当たったときに考える・調べる・理由を探す材料になったり説明しやすくなったりするから。多言語でも応用可能かもしれないし
371Name_Not_Found:2014/07/13(日) 12:20:49.91 ID:???
>>370
オブジェクトをネームスペース的に使ったりすることを考えるとabcだけっていうのは有り得ないなあ
newしてメソッド送信っていうパターンはけっこう使うんで全部っていうのもちょっと嫌
372Name_Not_Found:2014/07/13(日) 12:24:28.35 ID:rk5ihVbk
>>370
真面目な質問のようなので id を出しておく(私もコロコロ変わるが)

もし、new Hoge.foo(); で new 演算子の対象が Hoge になるなら、new演算子の対象を foo にする為に new Hoge をローカル変数に格納しなければならない
new Hoge().foo() とすれば Hogeを対象に出来るのだから、選択肢を増やす意味では new Hoge.foo(); は foo が対象であるべきといえる
373Name_Not_Found:2014/07/13(日) 12:28:49.70 ID:???
選択肢増やす事のどこが良い事なんだ
どっちが先に演算されるかややこしくなるだろ
わざわざ変数に収納しなくても必要なら()で優先順位決めれば良い
374Name_Not_Found:2014/07/13(日) 12:31:34.90 ID:???
いつも new (Hoge.foo()) としろと?w
勘弁してくれw
375Name_Not_Found:2014/07/13(日) 12:35:39.38 ID:???
BNFとか文脈自由文法とか、
JavaScriptで一般的なコーディングをする限り、ほとんど知る機会もないと思うんですが、
どこで学んだのですか?
情報処理系の大学とかならありそうですが
376Name_Not_Found:2014/07/13(日) 12:36:57.40 ID:???
new Hoge().foo() の方は (new Hoge()).foo() としなきゃいけないルールでもよかったかもね
でも new Hoge().foo() が可能なルールにしたのは作者の趣味かな
377Name_Not_Found:2014/07/13(日) 12:38:43.22 ID:???
>>374
どこに括弧入れてるんだ。馬鹿なの?
378Name_Not_Found:2014/07/13(日) 12:42:13.91 ID:???
web+db pressの総集編を検索したらBNFについての記事がいくつかあるようなので
勉強してみます
ありがとうございました
379Name_Not_Found:2014/07/13(日) 12:55:06.84 ID:???
文脈自由文法を知らなくてもコーディングはできるけど、
文脈自由文法と正規文法の違いとか理解できてると
苦労してゴミみたいなアルゴリズムのコード捻り出す事が減って良いと思いますよ。
もっと早く勉強しとけばよかったと後悔してます。
380Name_Not_Found:2014/07/13(日) 15:40:05.59 ID:XqnVuZUd
Drag&Drop APIでD&Dしたファイルの名前を取得することはできるけど
パスを取得することはセキュリティ上できないというのをどこかで読みました。

D&Dしたファイルからパスを取得しA要素を生成して
<a href="ファイルのローカルパス">リンク</a>
のようにすることはできないのでしょうか?
381Name_Not_Found:2014/07/13(日) 15:56:58.42 ID:???
>>380
それができるってことはその要素を生成すると同時にローカルパスをパスをサーバ側へ通知することもできるってことだからなあ
ファイルのパスの途中に自分の名前とか入ってる間抜けがいるだろ?
恥ずかしいじゃん
382Name_Not_Found:2014/07/13(日) 16:22:52.32 ID:???
firefoxでwindow.heightでウインドウの大きさを取得して
キャンバスの大きさを設定したのですが左と上が画像のようにズレてしまいます
原因分かりますか?
http://www.dotup.org/uploda/www.dotup.org5187136.png
383Name_Not_Found:2014/07/13(日) 17:12:16.04 ID:???
webdbpressとwikipediaでABNFを理解しました
分かってみれば、正規表現などよりも単純なものですね
そしてあらためて>>266のサイトを見たのですが、
この表記は、ABNFと微妙に違うような?
=の代わりにコロンが使われているし、
コロンが場合によっては複数だったりして、何か知らない規則が混ざってる感じです
どういうことでしょう?
384Name_Not_Found:2014/07/13(日) 17:17:47.73 ID:???
デスクトップ画面をアピールしたい割合が強い
385Name_Not_Found:2014/07/13(日) 17:19:05.00 ID:???
>>382
bodyにもスタイルはあるんだぜ
せっかくインストールしたFierbugで確認してみよう
386Name_Not_Found:2014/07/13(日) 17:27:11.15 ID:???
>>383
そのドキュメントの文法の記述方法は5章で解説されてる
387382:2014/07/13(日) 20:09:38.70 ID:???
>>385
marginを0にしたらピタっと合いました
実は前作ってたゲームもマップチップが合わなくて挫折しまいました
たぶんこれが原因ですね
ありがとうございます!
388Name_Not_Found:2014/07/13(日) 22:37:58.76 ID:???
var frameid = 0;
var request_url = "";
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (frameid === 0) {
frameid = details.frameId;
}
request_url = details.url;

if (frameid === details.frameId) {
// 判定用にrequestBodyの再構築
var size = details.requestBody.raw[0].bytes.byteLength;
var dataview = new DataView(details.requestBody.raw[0].bytes);
var request = "";
for (var i = 0; i < size; i++) {
var code = dataview.getInt8(i);
if (code < 0) code += 0x100;
request += String.fromCharCode(code);
}
389Name_Not_Found:2014/07/13(日) 22:38:46.88 ID:???
// debug
console.log(request.length+":"+request);

// treasure_indexの場合Ajaxで再送信
if (request.match(/raidboss.treasure_index/)) {
console.log("----treasure start----");
console.log("----send treasure packet----");
var xhr = new XMLHttpRequest();
xhr.open('POST', request_url, true);
xhr.onreadystatechange = function(e){
if (xhr.readyState==4 && xhr.status==200) {
checkTresurePacket(xhr.responseText);
}
};
xhr.setRequestHeader("Content-type","application/x-amf");
xhr.send(new Uint8Array(details.requestBody.raw[0].bytes));
}
}
},
{urls: ["http://*.alteil.net/gateway/"]},
["requestBody"]
);
390Name_Not_Found:2014/07/13(日) 22:39:31.12 ID:???
function checkTresurePacket(text) {
var button3=0,button2=0,button1=0;
// 順序を取得
text.match(/button3.(.)/);
button3 = RegExp.$1.charCodeAt(0);
text.match(/button2.(.)/);
button2 = RegExp.$1.charCodeAt(0);
text.match(/button1.(.)/);
button1 = RegExp.$1.charCodeAt(0);

// 順序を配列に格納
var order = [button1, button2, button3];
// debug
// console.log(list);
// 特殊な順序
if (order[0] == 3 && order[1] == 1 && order[2] == 2) {
order = [2, 3, 1];
} else if (order[0] == 2 && order[1] == 3 && order[2] == 1) {
order = [3, 1, 2];
}

// 可視化
var viewer = [];
viewer[order[0]] = "赤";
viewer[order[1]] = "青";
viewer[order[2]] = "緑";
alert(viewer.join(""));
}

このコードの解説をお願いします。background.jsというファイルの中身です。
391Name_Not_Found:2014/07/13(日) 23:22:49.30 ID:???
ゲームでチートしたいなら必死こいて勉強しな
392Name_Not_Found:2014/07/13(日) 23:37:06.51 ID:???
上にサイト貼ってあるんだからそこ使えよ
393Name_Not_Found:2014/07/14(月) 00:05:48.18 ID:???
>>391
どうやって手をつけていいか分かりません
なのでとりあえずスレにあったコードを理解しようと・・・

>>392
難しそうなのでスルーしてしまってました
http://jsbin.com/jereloni/1/edit
これで合っているのでしょうか?
394Name_Not_Found:2014/07/14(月) 00:45:24.10 ID:???
これってchromeの拡張機能じゃね
395Name_Not_Found:2014/07/14(月) 01:10:53.58 ID:???
PCをサスペンドから復帰させた時に時々chromeの動作が変になります
リロードすれば直ります
これはどうしようもないですよね?
396Name_Not_Found:2014/07/14(月) 01:14:13.00 ID:???
>>394
その通りです
他にも方法があるけどChromeの拡張機能が簡単なのでそれにしたそうです

readmeの一部です
■使い方
1. Google Chromeで「chrome://extensions/」へアクセス
2. デベロッパーモードのチェックボックスを入れる
3. パッケージ化されていない拡張機能を読み込む
4. 同梱のdtf_boxを指定する
以上で導入完了です。
397Name_Not_Found:2014/07/14(月) 01:35:39.60 ID:???
order配列に、ボタン1-3の順序を入れる
// 特殊な順序
order配列が、[3, 1, 2]なら[2, 3, 1]へ、
逆に、[2, 3, 1]なら[3, 1, 2]へと交換している
つまり、[3, 1, 2]←→[2, 3, 1]の入れ替え

// 可視化
viewer配列に、order配列に設定された、
ボタンの順序に従って、赤青緑を設定している

例えば、order配列が、[3, 1, 2]なら
viewer[3]=赤、[1]=青、[2]=緑
つまり、viewer[1-3]は青緑赤の順に並ぶ

order配列が、[2, 3, 1]なら
viewer[2]=赤、[3]=青、[1]=緑
つまり、viewer[1-3]は緑赤青の順に並ぶ
398Name_Not_Found:2014/07/14(月) 02:14:53.17 ID:???
JavaScriptの勉強法についての質問があります

大抵のwebアプリはjavascriptで書かれているので、ソースコードはいくらでも転がっています

それで例えばgooglemapのような高度なアプリのソースを見て、参考にすることは可能ですか?
それともブラウザからでは何らかのセキュリティなどが掛けられていて参考にしても意味が無かったりしますか?
399Name_Not_Found:2014/07/14(月) 03:30:12.42 ID:???
>>398
無理です。
正確に言うのならば時間を無駄に消費するだけです。

なぜならgooglemapのような高度なアプリは
速度を極限まで上げるために、コードを縮小化しているからです。
つまり、わかりやすい変数名・関数名が、単なるa, b ,c という短い名前に
置き換えることで転送速度を上げてます。

また、作るときは作りやすさのために複数のファイルで作ります。
この作りやすいファイル構成というのもJavaScriptの勉強の一つです。
が同じく転送速度を上げるために一つないし、少数のファイルに結合しています。

つまり高度なアプリのJavaScriptコードのほとんどは、ソースそのものであることはまずなく、
人間が読んで勉強になるものにはなっていません。

ソースを見たいなら、有名なオープンソースのコードを見ればいいです。
そんなにgithubにいくらでも転がっています。
400Name_Not_Found:2014/07/14(月) 09:03:33.73 ID:???
コードの綺麗さは参考になるけどプロジェクトがデカすぎてどこで何やってるかは分からんな俺は
401Name_Not_Found:2014/07/14(月) 10:18:08.84 ID:???
>>398
Minified されたコードは Online JavaScript beautifier で整形できるので人間が読めないわけではありません。
http://jsbeautifier.org/
ただ、コード量が膨大なので全てを読み解くのに恐ろしく時間がかかります。
読みたい部分だけ目星をつけて読むのなら良いと思いますが、全体的に読むなら Google が提供しているJavaScriptライブラリを読むほうが時間効率的に良いと思います。
402Name_Not_Found:2014/07/14(月) 10:58:53.51 ID:???
>>386
ありがとうございました
266-267で書かれていることがだいたい理解できました
403Name_Not_Found:2014/07/14(月) 11:22:00.74 ID:???
new hoge.hoge.hoge.Hoge()
という式があった時、
hoge.hoge.hoge.Hoge
が先にMemberExpressionとして評価されると思いますが、
MemberExpressionの定義の中に、
hoge.hoge.hoge.Hogeのように再帰したMemberExpressionを定義する部分がないように思います
なぜこれで再帰的に評価されるのでしょうか?
404Name_Not_Found:2014/07/14(月) 11:40:16.39 ID:???
論破君が論破のために必死で勉強してるのか
しかし目が節穴だな
405Name_Not_Found:2014/07/14(月) 11:40:17.49 ID:???
MemberExpression . IdentifierName

この定義が再帰的に適用されるのが分かってないと思われ
406Name_Not_Found:2014/07/14(月) 11:44:26.98 ID:???
>>403
下記が再帰的に参照している。

MemberExpression
 MemberExpression . IdentifierName

最近、荒れがちなので質問時には id を出してもらえると有難い。
407Name_Not_Found:2014/07/14(月) 12:55:33.07 ID:???
1 + 2 + 3 + 4 + 5が定義されてないって言ってるような物だな
408Name_Not_Found:2014/07/14(月) 12:55:47.42 ID:???
あっ、そうか
MemberExpressionにMemberExpressionが書いてるんだから、それが再帰ですよね
ありがとうございました
409Name_Not_Found:2014/07/14(月) 13:41:39.33 ID:???
JavaScriptで初めてオブジェクト指向を学びたいのですが全体の構造というか使われ方が掴めません
よくある10行や20行のパーソンやらアニマルやらを使ったオブジェクト指向の概念の説明ではなく
実際に計算機のような簡単なもので全体的に完成したコードの例が一つ欲しいのですが、いいものはありませんか?
410Name_Not_Found:2014/07/14(月) 13:50:45.72 ID:???
オブジェクト指向はセンス
更に言うならJavaScriptのobj指向はプロトタイプベースといってちょっと特殊
(普通はクラスベース)
C++のオブジェクト指向から学ぶべし
411Name_Not_Found:2014/07/14(月) 14:24:46.14 ID:???
オブジェクト指向が普及しだしてから、システムの重大障害とかセキュリティーホールとか、
大量発生するようになった。
共通化とかカプセル化とかフレームワークとか進めた結果、
業務アプリの設計者や実装者が、
どういう動作をするかよく理解しないまま利用しているケースが多い。
いざ不具合が発生した時に、全体がわかる人がいないから、
何がどうなっていてどこを直す必要があるのか解析できる人がほとんどいない。
シンプルに効率よく構築できるはずが、
問題がより複雑になって、維持管理にコストがかさんでいるのが現状。
10年後に主流であり続けられるかと言ったらかなり微妙だね。

言語を学ぶのではなく、アルゴリズムを徹底的に身に着けるほうが、役に立つよ。
あえて言語を学ぶとしたら英語一択。
412Name_Not_Found:2014/07/14(月) 14:34:28.24 ID:???
オブジェクト指向が問題を複雑にしたんじゃなくて
オブジェクト指向によって複雑な問題に対処できるようになっただけ
もしオブジェクト指向を使わずにその複雑な問題に対処しようとしたら
もっと問題が出るよ
413Name_Not_Found:2014/07/14(月) 15:08:38.42 ID:???
・文字列末に<br>がひとつだけあれば削除する
・文末の<br>がふたつ以上なら削除しない

これをreplaceでするにはどうしたらいいですか?
文末の<br>をひとつ削除する、なら簡単にできますが
ふたつ以上なら削除しない、が難しいです
414Name_Not_Found:2014/07/14(月) 15:14:33.45 ID:???
>>413
ちょっと正規表現考えたけど
第二引数を関数にしてごにょごにょしたくなってきた
415Name_Not_Found:2014/07/14(月) 15:16:33.07 ID:???
正規表現だけでは難しいので

str.replace(/(<br>)*$/g,function(s){
return s.length > 4 ? s:'';
})

とやったら出来ました
もっといい方法はあるでしょうか
416Name_Not_Found:2014/07/14(月) 15:16:58.48 ID:???
>>414
まさにごにょごにょしましたw
417Name_Not_Found:2014/07/14(月) 15:17:01.02 ID:???
>>414
普通に
.replace(/([^(<br>)]?)<br>/, '$1') で良くね?
418Name_Not_Found:2014/07/14(月) 15:17:44.67 ID:???
後者の<br>の後ろの$が抜けてた
419Name_Not_Found:2014/07/14(月) 15:19:49.04 ID:???
試したらダメじゃーんwwすまんな
420Name_Not_Found:2014/07/14(月) 15:37:40.14 ID:???
javascriptの正規表現には否定的後読みの機能はなかったはず
それに他の人がソースを触ったりすることを考えると>>415で最善
421Name_Not_Found:2014/07/14(月) 16:45:28.95 ID:???
>>413
str.replace(/((<br>)|(<br><br>))($)/g,"$3$4")

でできる気がする
422Name_Not_Found:2014/07/14(月) 17:07:39.15 ID:wP/G5P5l
>>413,415
str.replace(/(<br><br>)$|<br>$/g, '$1')
423Name_Not_Found:2014/07/14(月) 17:31:41.23 ID:???
たしかにそれで出来ますね
<br><br>をあえて置換するという発想がすごいです
ありがとうございました
424Name_Not_Found:2014/07/14(月) 20:51:25.60 ID:???
>>401
> Minified されたコードは Online JavaScript beautifier で整形できるので人間が読めないわけではありません。
実際にやってみればわかるけど、読めないよ。

あれは変数名は元に戻さないからね。

改行とインデントと整えるツール
425Name_Not_Found:2014/07/14(月) 21:29:29.40 ID:mCHQ5sC2
>>424
分かっています。
機械的処理では元の変数名には戻せませんが、読めない事はありません。
実際に読んだことがありますよ。
426Name_Not_Found:2014/07/14(月) 22:16:56.61 ID:???
A(){
B();
}

B(){
C();
}

A(){
B();
C();
}
ならどっちがいいですか
427Name_Not_Found:2014/07/14(月) 23:46:22.43 ID:???
どれもだめ
428Name_Not_Found:2014/07/15(火) 01:17:44.12 ID:???
>>424
ロジック読むのに、変数名なんて関係ないよ。
実際、20年ぐらい前のプログラムの変数名や関数名は
普通に「A01B002」とかコードで書くのが普通だったし、
苦も無くロジックを組めたし、読めた。
429Name_Not_Found:2014/07/15(火) 01:54:30.31 ID:???
読める自慢されても^^;
430Name_Not_Found:2014/07/15(火) 03:16:56.73 ID:???
js は型を宣言しないので、名前が意味不明になると余計につらいだろう
431Name_Not_Found:2014/07/15(火) 03:20:15.78 ID:???
変数名の長さもパフォーマンスに影響するからな
読めるソースを書いて後はグーグルさんに最適化してもらえばええ
432Name_Not_Found:2014/07/15(火) 03:25:46.45 ID:???
変数名の長さがパフォーマンスにどのくらいどういうかたちで影響するんですか
433Name_Not_Found:2014/07/15(火) 03:46:22.87 ID:???
マイクロ秒単位の話だから気にする必要はない
ただ最適化の手法としてのお話
434Name_Not_Found:2014/07/15(火) 04:23:14.46 ID:???
2つ質問なんですが
質問1 thisをオブジェクト内で使ったらthis.プロパティで普通に呼び出せたのに
thisを関数内で使ってローカル変数を呼び出しても
function a(){
var tes=5;
alert(this.tes);
tes++;
}
//外部から2回呼び出す
6にならないどころか5すら出てこないのですがなぜですか?
質問2 グローバル変数を使わずに外部から2回関数を呼び出しても
その値を保持(C++のスタティック変数のように)するにはどうすればいいでしょうか?
435Name_Not_Found:2014/07/15(火) 04:33:26.65 ID:???
function a(){} の外でvar tesしようと思わないのか
436Name_Not_Found:2014/07/15(火) 05:44:00.75 ID:???
配列とスカラーの両方を取る場合の引数名は何にしてますか?
idとidの配列の両方を取るような場合です
437Name_Not_Found:2014/07/15(火) 05:57:35.65 ID:???
変数の意味が重要
a + b で、aがリンゴの数、クラスの生徒数など、
意味がわからないと、ソースコードは理解できない

ソースコードがすごく少ない、数行のテトリスを見たが、
変数の意味がわからない
7で割る理由だけが、タイルの形が7種類あるためと、
そこしかわからない
438Name_Not_Found:2014/07/15(火) 08:39:49.84 ID:???
lodashを使い
array同士で一致するものがあるかを調べる時は
_.intersection(a,b).length > 0
とするしかないですか?
もっといいやり方あれば教えて下さい
439Name_Not_Found:2014/07/15(火) 10:15:15.49 ID:???
>>398で勉強のためにソース読みたいって言ってるとこから始まってるのに
変数名がデタラメになってるソースでも読めるよ!読めるよ!読めるよ!とかバカすぎ
440Name_Not_Found:2014/07/15(火) 10:56:05.49 ID:???
該当Webアプリがどういうコードで実装されているか勉強するためにコードリーディングするので変数名は何でもいい
読みにくいだけで読めないわけじゃない
441Name_Not_Found:2014/07/15(火) 11:06:43.40 ID:???
変数名がデタラメで勉強にならないのは「変数名の命名規則を学ぶ時」ぐらいか
442Name_Not_Found:2014/07/15(火) 11:06:54.59 ID:???
議論するだけ無駄
こいつは論破することが目的だから
論破されることなんて絶対許さない
443Name_Not_Found:2014/07/15(火) 11:16:45.66 ID:???
デコンパイル後のソースとかも同じ
必要があったから読んだ経験あるけど時間の無駄感はんぱなかったわ
やはり何事も効率が良いほうがいい
444Name_Not_Found:2014/07/15(火) 11:44:42.67 ID:???
minifiedされたコードリーディングは、そこにどれだけ時間と情熱をかけられるかに依る
その判断は人それぞれなので、この場合は質問者自身にしか判断できない

この手の問題で質問者と自分を同一視して「無駄」と評する人がいるけど、質問者の可能性を自分と同一と見るのは傲慢だと思うな
「コードを読むのに時間がかかる」問題点は共通認識なのだから、後は質問者に判断してもらえばいい
445Name_Not_Found:2014/07/15(火) 11:53:18.15 ID:???
サーバから送られてくるデータの形式とか分からないから
たとえミニファイされてなくても難易度がS級レベルなのはまちがいない
はい論破
446Name_Not_Found:2014/07/15(火) 11:57:10.65 ID:???
特定のコードの意味が知りたいのならminifiedを解読して調べるが
何か勉強するのに適当なコードが欲しいっていう相手に勧めるとかありえんだろ?
447Name_Not_Found:2014/07/15(火) 12:00:24.29 ID:???
>>410
プラットフォームを選ばずブラウザですぐにテストできるのでJavaScriptでオブジェクト指向を始めたいです
「クラス」などの単語無しの解説サイトが少ないこともあり、type=text/javascriptから始まる
オブジェクト指向スクリプティングのお手本の様なコードが見たいのですが
やはり「クラス」なしで解説している参考書を探すべきでしょうか
448Name_Not_Found:2014/07/15(火) 12:01:40.73 ID:???
>>446
特定のコードの意味が知るのも勉強だと思うが
449Name_Not_Found:2014/07/15(火) 12:33:04.05 ID:???
>>445
もはやどの意見に対しての論破なのかもわからん
450Name_Not_Found:2014/07/15(火) 12:40:02.23 ID:???
googlemapの解析の難易度から言えば
ミニファイによる難読性などは
もはや本質的ではないといえる
はい論破
451Name_Not_Found:2014/07/15(火) 12:49:27.46 ID:???
論破いいたいだけやろ
452Name_Not_Found:2014/07/15(火) 12:50:38.39 ID:???
複雑で大規模なコードであればあるほど変数名ないと読みづらいだろ
453Name_Not_Found:2014/07/15(火) 13:20:47.83 ID:???
難易度10000が難易度10500になる程度
454Name_Not_Found:2014/07/15(火) 13:38:15.67 ID:???
よくJavaScriptはソースが隠せないから怖くて仕事で使えないみたいな話しがあるが、
Javaは逆コンパイル出来る事を考えれば、難読化したJavaScriptの方が型情報が無い分
ソースを隠せてると言える
455Name_Not_Found:2014/07/15(火) 15:31:34.23 ID:???
読みにくいだけやろ
456Name_Not_Found:2014/07/15(火) 16:57:00.94 ID:???
ソースコードなんて難読化しようが圧縮化仕様がクライアントに渡る時点で全部漏れてるんだよ
そんなところに気を使うなら人様にミられてもいいコードを書けばいい
他人に見られると困るようなコードを書きたいならjavascriptは触るな
457Name_Not_Found:2014/07/15(火) 16:59:00.57 ID:???
そのコードについて一番詳しいのは自分
という状態を保っておけばパクラーが出てきても問題ない
458Name_Not_Found:2014/07/15(火) 17:08:39.89 ID:???
>>456
触るなとうのはJavaも含まれているのか?
JavaScriptよりもJavaの方が分かり易いソースを得る可能性は高いと思ってるけど
459Name_Not_Found:2014/07/15(火) 17:20:06.88 ID:???
onblurハンドラがセットされている要素をblur()をしたら、
onblurハンドラは、blur()以後のコードよりも先に実行されますか?
場合によってはblur()以後のコードの方が先に実行されることがあり得ますか?
460410:2014/07/15(火) 19:09:13.66 ID:???
>>447
クラスなしのオブジェクト指向を理解したところで何になるわけ?
それオブジェクト指向じゃないし
言い方きついがJSでオブジェクト指向を理解するのはお前じゃ無理といっておく
461Name_Not_Found:2014/07/15(火) 19:57:42.71 ID:???
オブジェクト指向自体がオワコンだから、覚える必要なよ。
関数型言語が復権する。
462Name_Not_Found:2014/07/15(火) 20:53:39.00 ID:???
>>460
JavaScriptのオブジェクト指向にはクラスそのものは無いと読んだことがあります
もしそうなら「クラス」あるいは「クラスのようなもの」というイメージで理解してしまうと
JavaScriptでしかできないような書き方を否定してしまうようで、なんとなく避けたいです
463Name_Not_Found:2014/07/15(火) 22:05:45.82 ID:???
>>461
復権も何も、関数型言語が覇権を握った事なんてあったっけ?
464Name_Not_Found:2014/07/15(火) 23:29:47.55 ID:???
いいや無い
465Name_Not_Found:2014/07/15(火) 23:40:01.62 ID:GCy+oIyF
>>398はどこに消えたのか
466Name_Not_Found:2014/07/16(水) 01:02:14.67 ID:???
Cを関数型言語だと誤解してる人は少なからずいる。
467Name_Not_Found:2014/07/16(水) 01:42:52.64 ID:???
>>462
実際クラスベースっぽい書き方とprototypeベースっぽい書き方って大して変わらんよ
継承の仕方が違うだけで
どっちの書き方から覚えようともJavaScriptのオブジェクト指向がわかれば普通に両方書けるようになる
468Name_Not_Found:2014/07/16(水) 05:27:56.13 ID:???
>>461
関数型パラダイムとオブジェクト指向は
対立するものではなく共存するもの
両方知る必要がある
469Name_Not_Found:2014/07/16(水) 05:53:14.00 ID:???
オブジェクト指向はオワコンになったんじゃなくて常識になったんだよ
470Name_Not_Found:2014/07/16(水) 08:11:07.39 ID:???
JavaScriptはプロトタイプを使って結果的にオブジェクト指向言語と同じことを実現しているだけなので
「オブジェクト指向を覚える」という目的には適していない
471Name_Not_Found:2014/07/16(水) 13:33:19.06 ID:???
JavaScriptはPythonとかと全く同じオブジェクト指向言語とも言える
本来はclassとかのキーワードを導入して実装の詳細は隠すもんだが
JavaScriptはそれが剥き出しになってる(prototypeがそれ)

動的言語のクラスシステムがどう実装されているか勉強にはなったが
おかげでオレオレクラスシステムが氾濫するはめにもなった
472Name_Not_Found:2014/07/16(水) 14:38:19.49 ID:???
document.getElementByIdでDOM要素を変数に代入したあと
そのDOM要素をremoveしても、
変数の中にはDOM要素が入っています
もしDOM要素を持っている変数がある場合は、それも削除しないと
メモリは完全に解放されない、ということでしょうか?
473Name_Not_Found:2014/07/16(水) 14:48:38.04 ID:???
はい
474Name_Not_Found:2014/07/16(水) 15:06:37.45 ID:???
ありがとうございました
475Name_Not_Found:2014/07/17(木) 03:26:35.12 ID:???
function func(a){
this.a=a;
}
なぜこれで保存?できるんですか?
476Name_Not_Found:2014/07/17(木) 03:29:06.44 ID:???
new A();とすると、
Aと同名のコンストラクタ関数 Aが呼ばれるので、
その中に、そのクラスに特有の処理を書けばよい

function A(){
thisを使って、プロパティ・メソッドを作る
}

次に、Aのプロトタイプに、親クラスPを、newして設定する
これで、Aがnewされる時には同時に、Pの部分もnewされて、
Pクラスのコンストラクタ関数 Pが呼ばれる
A.prototype = new P();

A1{P1}, A2{P2}
オブジェクトA1の中にP1があり、A2の中にP2があるイメージ

つまり、オブジェクト指向のクラスは、
JSではコンストラクタ関数のこと


そんなに本格的なことを勉強したいのなら、
この本を読むのが速い

はじめてのJavaScript、秀和システム
掌田津耶乃(しょうだ つやの)、2013

オブジェクト指向、DOMについて、
各100ページの説明がある
477Name_Not_Found:2014/07/17(木) 03:43:43.73 ID:???
またかw
478Name_Not_Found:2014/07/17(木) 06:32:26.22 ID:???
>>476
もはやネガティブキャンペーン
479Name_Not_Found:2014/07/17(木) 10:40:13.63 ID:???
>>475
varなくても宣言できちゃうから、と返せば良いのだろうか
480Name_Not_Found:2014/07/17(木) 11:04:52.47 ID:???
>>476
> これで、Aがnewされる時には同時に、Pの部分もnewされて、
> Pクラスのコンストラクタ関数 Pが呼ばれる
> A.prototype = new P();
>
> A1{P1}, A2{P2}
> オブジェクトA1の中にP1があり、A2の中にP2があるイメージ

間違ってます
もういっかい勉強しなおしましょう
481Name_Not_Found:2014/07/17(木) 15:50:33.45 ID:???
イベントハンドラの中で
一連のイベント処理が終わってから実行される処理をセットしたい場合
どうやればいいですか?
たとえばclickハンドラの中で、その処理をセット
その後もイベントバブリングし、デフォルト処理もされる
その後、clickハンドラの中でセットした処理が実行される
という感じです
482Name_Not_Found:2014/07/17(木) 15:53:47.09 ID:???
setTimeoutでウェイトを持たせれば出来るとは思いますが
それだと処理速度依存になるので、
もっとスマートなやり方はできないかと
483Name_Not_Found:2014/07/17(木) 16:10:44.22 ID:???
setTimeoutで0を指定しても、イベント処理が終わった後に実行されました(chromeにて)
望ましい動作ですが、
これはJSにおけるデフォルトの動作なのでしょうか?
つまり、「イベント処理がすべて終わるまではタイマ割り込みは発生しない」ものなのでしょうか?
484Name_Not_Found:2014/07/17(木) 16:27:30.42 ID:???
http://jsbin.com/vifuzoru/1/edit

chrome/firefox/IEそれぞれの最新版では検証しても、
setTimeout0はイベント処理の後に実行されました。
関数の途中で割り込みが発生することはありませんが、
イベント処理全体もそのような形でガードされているのでしょうか・・?
485Name_Not_Found:2014/07/17(木) 17:08:34.33 ID:U4NDgl4I
>>481
前も同じ質問しませんでしたか?
イベントハンドラ関数内で処理リストを持っておき、自前で管理して下さい。

>>484
保証されません
486Name_Not_Found:2014/07/17(木) 18:12:50.41 ID:???
ありがとうございます
根拠は何でしょうか?
イベントキューにスタックが積まれて、
イベントループが順次処理する、
settimeoutはイベントキューの最後に追加する、
というような記事は見つかるのですが、
あるイベントが呼び出すイベントハンドラの系が、
イベントキューに単一タスクとして登録されるのか、そうでないのか
という情報が今のところ見つからなくて困ってます
根拠をご存知でしたら教えてください
487Name_Not_Found:2014/07/17(木) 18:18:12.07 ID:???
ん?
タイマーの方は構わず発火しちゃうんじゃないか?
488Name_Not_Found:2014/07/17(木) 18:36:39.51 ID:???
タイマーもイベントキューで実行されるようです
イベントキューに例えばクリックイベントが登録されるとすると、
そのイベントの処理が実行されている間は
イベントキューに何が積まれようがそもそも見られてもいないのでは
とも思うのです
489Name_Not_Found:2014/07/17(木) 18:57:49.09 ID:???
俺もそんな気がしたけど仕様ざっと見てもそこらへん書いてなかったし、
保証されてないのかな
490Name_Not_Found:2014/07/17(木) 20:32:03.00 ID:???
イベントキューの中ではタイマーもクリックもイベントという意味で同列で
FIFOでたんたんと実行されていく、と考えたら、
イベントハンドラの中でセットしたタイマーイベントがそのイベントが終わった後に実行されるのは
原理的に必定だと言えるのでは。
またハンドラ内でタイマー以外のイベントをtriggerした時にも、
あくまでイベントキューに積まれるだけで、実行はそのイベントが終わった後になるはず
491Name_Not_Found:2014/07/17(木) 20:37:26.54 ID:???
いま問題にしているのは、バブリングしていくときにバブリングフェイズ全体が一つのタスクなのか個々のハンドラ実行が一つのタスクなのかってことだろ
492Name_Not_Found:2014/07/17(木) 20:45:10.72 ID:???
その疑問を呈したのは自分ですが、
イベントキューというものの構造を考えると必然的にひとつのタスクになると思います
キューに積まれているのは各ハンドラへの呼び出しではなく、
クリックイベントだと思われますので。
現にイベントフェーズの中で遅い処理を書いても、
ハンドラ中で設定したsetTimeoutは必ずその後に実行されます
493Name_Not_Found:2014/07/17(木) 22:06:36.69 ID:kl3tLgIH
>>486
仕様に書かれていないからです。
最後に実行したいなら自前で順序を制御するのが最も確実であると思います。
494Name_Not_Found:2014/07/17(木) 22:07:04.94 ID:???
>>479
ということは実質外部変数と同じってことですか?
495Name_Not_Found:2014/07/18(金) 00:49:52.76 ID:???
【環境】IE9・IE10・Firefox・Chrome
【何をしたのか】ファイルをPOSTした
【エラーメッセージ】特になし
【期待する結果】画面遷移をせずに選択したファイルをPOST送信したい
【サンプルコード】
こちらでの質問でよいのか判断がつきかねるのですが
type=fileで選択した画像をPOSTしたいと考えておりますが

var image = $("#registerd [name=image]").val();

としてもimageには何も入っておりません。
その他のtype=textなどは取得できてPOST出来ております。

選択された画像を取得するにはどのようにすれば良いのでしょうか?
識者の方たちのアドバイスいただけると助かります。
496Name_Not_Found:2014/07/18(金) 00:56:37.79 ID:???
>>495
残念ながらjQueryでは選択したファイル内容を取得できない。
取得するにはFile APIを使用する必要がある。

ただしFile APIはIE10から対応だから
IE9では動かない。

画面遷移をせずにファイルをPOSTするだけなら
iframeを使ってできる。これなら古いブラウザでもOK
497496:2014/07/18(金) 00:59:14.60 ID:???
なお、ここらへんを意識せずにやってくれるライブラリがある。
検証したわけじゃないからオススメは言えないが

「ファイル アップロード JavaScript ライブラリ」あたりで
検索すると沢山出てくるよ。

良さそうなのがあったら教えてくれw
498Name_Not_Found:2014/07/18(金) 01:03:37.68 ID:???
jQuery初心者で勉強中の者です。

ttp://calie.jp/beashow/index.htmlのサイトのような
画像を読み込んだら自動でエフェクトが動く動きを実現するには

jquery.inview.jsとjquery.easing.1.3.js

が必要だということはわかったのですが、どのように記述すれば実現できるのかがわかりません。
画像をよみこんでフェードインさせる方法を詳しい方ご教授いただけないでしょうか
499Name_Not_Found:2014/07/18(金) 01:08:36.86 ID:???
idがabcのtrタグ内にある、nameが_defで終わるnameをリストしたい。
一番スマートな方法は?

<tr id="abc">
<td><input name="fas_def" /></td>
<td><input name="sec_def" /></td>
<td><input name="thr" /></td>
<td><input name="fou_def" /></td>
<td><input name="fif" /></td>
<td><input name="six_def" /></td>
</tr>
500Name_Not_Found:2014/07/18(金) 01:16:23.51 ID:???
>>499
一行で書いてみた。動かしてないけどこんな感じかな。

var names = $.map($('#abc [name$="_def"]'), function(e) { return e.attr('name') });
501Name_Not_Found:2014/07/18(金) 01:32:45.00 ID:???
>>498
普通にDOM使えばライブラリなんかいらないだろうに
jQueryならanimate使うとか
502Name_Not_Found:2014/07/18(金) 01:38:12.35 ID:???
少し間違った。こうだった

var names = $.map($('#abc [name$="_def"]'), function(e) { return e.name })

ブラウザがarrow functionをサポートしてれば更に短くこう書ける。
var names = $.map($('#abc [name$="_def"]'), e => e.name)
;
503Name_Not_Found:2014/07/18(金) 03:41:13.90 ID:???
もしイベントが並行に実行されるのなら、
関数Aの実行中にもう一つ、
同じ関数Aが実行される可能性があるので、

すべての関数を再入可能にしなければならないし、
すべてのグローバル変数を、ロックしなければならない
つまり、マルチスレッド・プログラミング

もしそんなに難しいなら、
誰もプログラミング出来ないはずだから、
そんなことはあり得ない

そもそもJSで、ロックやマルチスレッド・
プログラミングについて、書いている本があるのか?

>>498
jQueryの質問は、jQueryのスレへ書き込んで
504Name_Not_Found:2014/07/18(金) 04:30:43.13 ID:???
JSで画像をブラウザの表示領域内に表示されるまで読み込ませない、という処理は可能でしょうか?
505Name_Not_Found:2014/07/18(金) 05:26:04.52 ID:???
このスレはjqueryの話題も排除しません
506Name_Not_Found:2014/07/18(金) 06:23:25.86 ID:???
>>493
ありがとうございました
JSのイベント周辺について書かれている仕様書とは何でしょうか?
http://www.ecma-international.org/ecma-262/5.1/
これを見てもイベントについてはなぜか書かれていないようです
507Name_Not_Found:2014/07/18(金) 07:14:14.75 ID:???
http://javascript.info/tutorial/events-and-timing-depth#javascript-is-single-threaded

これにかなり詳しく書いてありました
必ずイベントキューに登録された順に実行されるわけではなく、
DOM mutation eventと
DOMイベントの中からトリガーされたDOMイベントは
キューに入れられずにシンクロナスに実行されるとのこと
508Name_Not_Found:2014/07/18(金) 09:50:33.23 ID:???
>>504
可能だし、最近よく見る
jqueryのプラグインにありそう
509Name_Not_Found:2014/07/18(金) 11:18:21.56 ID:???
510Name_Not_Found:2014/07/18(金) 13:19:03.61 ID:O3bHHC6+
>>506
>>4にリンクがあります。
http://www.w3.org/TR/DOM-Level-3-Events/
その他、DOM Events 周りの仕様も参考に。
http://www.w3.org/TR/#tr_DOM_events

>>507
そこはs公式ではないので必ず原文の仕様書と照らし合わせて情報の正誤を確認して下さい。
511Name_Not_Found:2014/07/18(金) 15:00:50.77 ID:???
>>508,509
やはりJavaScript無効環境に対応するにはHTMLにnoscriptを入れないとだめなようですね
今から大量のimgタグにそれをするのは大変なので諦めます ありがとうございました
512Name_Not_Found:2014/07/18(金) 19:31:05.14 ID:???
JavaScript/jQueryのコツ〜円滑な協業と連携でWebサイト作りを成功させる!〜
(番組ID:lv186185614)

2014/07/18(金) 開場:19:27 開演:19:30
513Name_Not_Found:2014/07/18(金) 19:38:39.40 ID:???
>>510
DOMの方に書かれているんですね
ありがとうございました
514Name_Not_Found:2014/07/18(金) 21:01:54.42 ID:???
jQuery初心者で勉強中の者です。

ttp://calie.jp/beashow/index.htmlのサイトのような
画像を読み込んだら自動で画像がフェードインしエフェクトが動く動きを実現するには

jquery.inview.jsとjquery.easing.1.3.js

が必要だということはわかったのですが、どのように記述すれば実現できるのかがわかりません。
スクロールしてその画像がみえてきたときに画像をよみこんでフェードインさせた画像を左右上下にエフェクトをかけて表示させる方法を詳しい方ご教授いただけないでしょうか
515Name_Not_Found:2014/07/19(土) 05:06:07.86 ID:???
jQueryの質問は、jQuery専門スレへ書き込んで

jQuery ライブラリ 総合質問所 vol.4
ttp://peace.2ch.net/test/read.cgi/hp/1400313626/l50
516Name_Not_Found:2014/07/19(土) 05:06:58.12 ID:???
>>515
断る
荒らしには反応するだけ無駄ですよ
518Name_Not_Found:2014/07/19(土) 10:21:37.50 ID:fvQeztGH
>>515
誘導するならライブラリ総合スレだろう
jQueryスレは荒らしが立てたスレだ

JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/
519Name_Not_Found:2014/07/19(土) 11:06:05.20 ID:???
誘導厨はプログラム板へどうぞ
520Name_Not_Found:2014/07/19(土) 12:02:31.31 ID:???
これにタイムアウトを組み込むことは無理でしょうか?
検索するとajaxでは見るのですが単純なpostではみかけませんでした。

$("form#sample").submit(function(){
var mail = $("#sample [name=mail]").val();
$.post(
'foobar',
{
'mail': mail
},
function(data)
{
if( data == 'success')
{
alert('OK');
}
else
{
alert('NG');
}

}
);
});

使用している部分が多いのでajaxに変更することなく、
これにタイムアウトがつけれればと考えています。
521Name_Not_Found:2014/07/19(土) 12:12:59.80 ID:???
JavaScript を自ら学ぶ人の質問はなかなか見ないな
522Name_Not_Found:2014/07/19(土) 15:59:36.01 ID:???
FormDataっていうのもあるのか。
でもこれHTML5の内容だな。
やっぱり古いブラウザではJavaScriptで
ファイルの送信ってきついの?
523Name_Not_Found:2014/07/19(土) 16:09:29.55 ID:???
>>522
> FormDataっていうのもあるのか。
HTML5 は関係あるのか?
XMLHttpRequest Level 2 の FormData の事ではないのか?
http://www.w3.org/TR/XMLHttpRequest2/#interface-formdata
524Name_Not_Found:2014/07/19(土) 16:20:18.18 ID:???
XMLHttpRequest Level 2 ってHTML5の一部でしょ?
525Name_Not_Found:2014/07/19(土) 16:23:07.48 ID:???
XMLHttpRequestはデータの送信だけだから
ローカルのファイルを読み込むには
別の技術が必要になるのでは?
526Name_Not_Found:2014/07/19(土) 16:45:02.49 ID:???
>>524
違う
527Name_Not_Found:2014/07/19(土) 22:14:24.45 ID:???
>>520
一旦サブミットイベントにフラグでreturn falseして、タイムアウトの関数でフラグを変えもう一回サブミットをよぶ。これはフラグで通すとか。
528Name_Not_Found:2014/07/20(日) 03:01:13.89 ID:???
>>486 >>493
setTimeout の task source は timer task source と呼ばれるものが
仕様に定義されている
www.w3.org/TR/html5/webappapis.html
したがってevent loop の task source とは別なので queue も別になるだろう

>>484
その eventの propagate が終了するまでは同期的に実行される筈
DOM仕様のアルゴリズムでも非同期には処理していないし
例えば dispatchEvent は同期的に実行される

>>525
送信だけって、リクエスト送ればレスポンス受信できるじゃないか?
ローカルファイルは FileAPI
529Name_Not_Found:2014/07/20(日) 06:58:01.87 ID:???
同期的と非同期的の意味が分からなくなってきました
関数発行後すぐに実行されるのが同期的、
発行してから実行されるまでタイムラグがあるのが非同期的
と思っていたのですが違いますか?
530Name_Not_Found:2014/07/20(日) 07:15:53.56 ID:???
>>529
違います。

同期は関数を実行して処理が追わらないと
関数から処理が戻らないものです。

その関数の処理が10秒かかる重い処理であれば
10秒の間、その他の処理は一切できなくなります。
だから非同期を使うんですね。

タイムラグが有るかどうかは関係ありません。
リクエストを送っている間jsが止まるのが同期

innerHTMLとnodeValueの値が違うのですが2つは同じじゃないんですか?
532Name_Not_Found:2014/07/20(日) 08:12:37.83 ID:???
>>530
すると非同期関数は、実行中に処理が戻ってくることがあるのですか?
遅延実行されるだけで、実行中はブロックされると思ってました
533Name_Not_Found:2014/07/20(日) 08:46:45.00 ID:xYE3uywO
>>531
innerHTMLはHTMLパーサが正規化した後のHTML
nodeValueはノード毎の固有値(nodeTypeによって値が異なる)
DOMとHTML5の仕様書を読もう
534Name_Not_Found:2014/07/20(日) 08:55:10.25 ID:???
シングルスレッドで動いているJSが
ノンブロッキング処理できるのは何故ですか?
535Name_Not_Found:2014/07/20(日) 10:34:54.37 ID:???
innerHTMLだったりjqueryのhtmlだったりって非推奨なのですか?
documentに大量ノードがあって、あからさまにid=hogeのテキストだけ更新、みたいな場合なら
やらないほうがいいというのはわかるのですが
何が何でも部分的にappendやらremoveやらをちまちま更新した方が良いのでしょうか?
536Name_Not_Found:2014/07/20(日) 13:14:51.60 ID:???
普通に使っていい
537Name_Not_Found:2014/07/20(日) 13:32:33.21 ID:???
>>534
シングルスレッドで動くのは、JavaScriptの実行環境で動く
あなたが作ったスクリプトであって、
JavaScript実行環境自体はマルチスレッドだからです。
538Name_Not_Found:2014/07/20(日) 13:33:12.48 ID:???
>>532
最後の行の認識で合ってる
10秒かかる関数なら同期だろうと非同期だろうと10秒ブロックされるのは一緒
その時点で実行される(同期)かされない(非同期)かってだけ
WebWorkerを使わない限りはシングルスレッド
539Name_Not_Found:2014/07/20(日) 13:58:46.80 ID:???
jqueryで
プラグインで追加されたメソッドの一覧を知る方法ありますか?
540Name_Not_Found:2014/07/20(日) 14:04:19.55 ID:6iUelLMD
>>535
innerHTMLの問題点がわかっているなら使ってもいい
541Name_Not_Found:2014/07/20(日) 14:09:19.64 ID:???
innerHTMLの問題点なら、jQueryのparseHTMLメソッドで解決できるよ。
だから今更遅いappendやremoveなんかを使う理由がない。
542Name_Not_Found:2014/07/20(日) 14:17:34.28 ID:???
innerHTMLの問題点って出力にそのまま使ったりしちゃ(攻撃者のコードが入るかもしれないから)ダメよってことであってる?
543Name_Not_Found:2014/07/20(日) 14:41:01.92 ID:???
>>538
ありがとうございました
544Name_Not_Found:2014/07/20(日) 14:42:25.62 ID:???
>>537
それは違うのでは?
仕様書にJavaScriptはマルチスレッドでなくてはいけないとか書かれてるんですか?
545Name_Not_Found:2014/07/20(日) 14:48:03.21 ID:???
>>544
仕様書には特に何も書かれているだろう。

何も書かれていないということは自由だ。
だからマルチスレッドにしてもよい。

マルチスレッドじゃなくても実装できるなら
別に構わないが。
546Name_Not_Found:2014/07/20(日) 15:10:30.34 ID:???
同期か非同期かって具体的にどんな場面で気にするのかわからん
547Name_Not_Found:2014/07/20(日) 15:16:22.12 ID:???
パフォーマンスを無視できるのならブロッキングI/Oが自然
つまりパフォーマンスを気にする時にノンブロッキングI/Oが使われる
はい論破
548Name_Not_Found:2014/07/20(日) 15:44:21.75 ID:???
ユーザー定義メゾットの対義語って何ですか?
549Name_Not_Found:2014/07/20(日) 15:45:59.38 ID:???
組み込み関数以外でお願いします
550Name_Not_Found:2014/07/20(日) 15:56:12.51 ID:???
>>547
何を論破してるのかわからんが、単なるパフォーマンスではないぞ

>>546
一般に、処理の中で
すぐにやらなくてもいい(画像の描画など)
すぐにやれない(他の処理の結果に依存するものなど)
終了時が予測できない(サーバのレスポンス待ちなど)
部分は非同期、すなわち後回しにする

GUI フロントエンドの場合は利用者を待たせないことが主な目的になる
551Name_Not_Found:2014/07/20(日) 16:15:33.39 ID:???
>>548
組み込みメソッド
552Name_Not_Found:2014/07/20(日) 16:16:53.24 ID:???
>>550
言ってること同じやんけ
論破され夫
553Name_Not_Found:2014/07/20(日) 16:45:20.82 ID:???
>>550
その処理の中で、サーバ側じゃなくてクライアント側でやる必要のある例ってどんなのがある?
画像の描画については同期・非同期を気にするパターンがそもそも思いつかなかった
554Name_Not_Found:2014/07/20(日) 17:03:23.47 ID:???
>>547
自前の重い処理があった場合は非同期にしてもパフォーマンスは向上しない
はい論破
555Name_Not_Found:2014/07/20(日) 17:04:29.73 ID:???
>>554
そんな1+1=2みたいなこと言われても言葉に困るわ
556Name_Not_Found:2014/07/20(日) 17:24:14.76 ID:???
そもそも同期/非同期っていう言葉がわかりにいんだよな
同期と言う言葉には調和やコントロールのイメージ、
非同期と言う言葉には不調和やアンコントロールのイメージがあるから。
しかし実態は逆で、同期的操作は時に不調和をもたらす
だからブロッキング/ノンブロッキングの方が適切だと思う
557Name_Not_Found:2014/07/20(日) 18:36:02.27 ID:???
でもまあ、ブロックと言われても、
レゴ?って思うのが普通だろうな。
558Name_Not_Found:2014/07/20(日) 18:53:07.62 ID:???
総合スレから飛んできました。現在、selectのidごとに関数を呼び出していますが、もっと
簡略化してどのオプションから選択されたかに変えることはできるでしょうか?

$(function(){
$("#f1").each(function(){
        var pos;
        function call_list(){省略}
$(this).each(function(){call_list();});
$("#sel1").change(function(){
pos = $("#sel1 option:selected").val();
call_list();
});
$("#sel2").change(function(){
pos = $("#sel2 option:selected").val();
call_list();
});
});
});
</script>
</head>
<body>
<form id="f1">
<select id="sel1">
</select>
<select id="sel2">
</select>
<select id="sel3">
</select>
</form>
</body>
559Name_Not_Found:2014/07/20(日) 18:54:07.86 ID:???
省略部分

$.ajax({
url:"ajax_call.php" ,type:"post",data:{"send":pos}
}).done(function(ret){
//alert(ret);
$("#sel2").children().remove();
$("#sel3").children().remove();
var i;
var sels = new Array("#sel1","#sel2","#sel3");
var pack = ret.split(":");
for( var i=0 ; i < pack.length; i++){
var sep = pack[i].split("@");
for(j=0;j< sep.length -1;j++){
var option = $("<option>");
var opt = option.html(sep[j]);
option.val(sep[j]);
var sel = opt.appendTo(option);
sel.appendTo(sels[i]);
}
}
}).fail(function(){
alert("error");
560Name_Not_Found:2014/07/20(日) 18:55:51.31 ID:???
>>558-559のリファクタリング後
$(function(){
  function threeSelectFrom(element) {
    function refresh(pos) {
      $.post("ajax_call.php", {send: pos}, function(ret) {
        $(".sel2, .sel3").empty();
        $.each(ret.split(":"), function(i, item) {
          var values = item.split("@");
           values.pop();
          var options = $.map(values, function(value) {
            return $("<option>").html(value).val(value);
          });
          $(".sel"+(i+1)).append(options);
        })
      }).fail(function() {
        alert("error");
      }
    }

    $(".sel1, .sel2").change(function() {
      var pos = $(this).find("option:selected").val();
      refresh(pos);
    });

    refresh();
  }

  $("#f1").each(function() {
    threeSelectFrom(this);
  });
});
561Name_Not_Found:2014/07/20(日) 19:07:31.27 ID:???
idを持たせずに
どのオプションから選択されたかを判定したいってこと?
別に、id持たせたらいいじゃん
何があかんねん
562Name_Not_Found:2014/07/20(日) 19:21:09.73 ID:???
> 何があかんねん

そりゃ再利用しづらいからだろ?
同じものが2つ以上でたら使えない。
563Name_Not_Found:2014/07/20(日) 19:25:13.48 ID:???
最近はIDを使うことって少なくなったな。
classやnameあたりで十分だよ。
564Name_Not_Found:2014/07/20(日) 19:42:22.66 ID:???
>>553
>画像の描画
クライアントのブラウザ側が非同期にやってくれるので
クライアントのスクリプト側が気にする必要は普通無い

> クライアント側でやる必要のある例
一般論だが
API にイベントハンドラが用意されていない種類の処理で
非同期にやる必要があるもの、または、自前の重い処理は、
クライアントのスクリプト側で非同期処理を書くことになるだろう
(重い処理は Worker 利用するか、細分化して setInterval や requestAnimationFrame など)
565Name_Not_Found:2014/07/20(日) 20:08:41.58 ID:???
JavaScriptで同期処理されるのって、
alertとconfirmぐらいなんだよな。

ブラウザ開発の初期に初期にこういう設計にしたの
凄いと思うわ。そのおかげでGUIとかアニメーションに
時間がかかるようなものでも、自然と非同期にプログラミング
するようになった。
566Name_Not_Found:2014/07/20(日) 20:50:26.07 ID:???
リフロー
567Name_Not_Found:2014/07/20(日) 23:40:33.20 ID:OP/8zzrX
>>542
XSSも問題点の一つだが、既存のDOMノードの参照が失われる問題の方が影響範囲が大きい
当然ながら>>541は解決法にはなっていない
568Name_Not_Found:2014/07/20(日) 23:41:12.74 ID:OP/8zzrX
>>542
XSSも問題点の一つだが、既存のDOMノードの参照が失われる問題の方が影響範囲が大きい
当然ながら>>541は解決法にはなっていない
569Name_Not_Found:2014/07/21(月) 00:33:16.67 ID:???
詳しく
570Name_Not_Found:2014/07/21(月) 00:37:31.30 ID:???
javascriptを使ったゲームが、FireFoxとGoogleChromeでは見られるのですが、IE11では読み込み画面から進みません
IEのセキュリティのレベルのカスタマイズでスプリクトの項目は全て有効にしたのですが無理です
どうやったらIEで見られるようにできますか
571Name_Not_Found:2014/07/21(月) 03:10:22.56 ID:???
確かに判定するためにDOMのidを使うのは無駄に消費するから駄目だな
data-idを使うべし
class使えって意見は意味わかんね
コマンド実行に一意性のあるidがいるのは当たり前
572Name_Not_Found:2014/07/21(月) 04:57:07.63 ID:???
>>567
kwsk
573Name_Not_Found:2014/07/21(月) 05:27:04.98 ID:???
全部書き換えるから要素のポインタを持ってる時とかに問題になりやすいって意味じゃないの
574Name_Not_Found:2014/07/21(月) 05:38:08.41 ID:???
要素にイベントハンドラ付けてたときとか
575Name_Not_Found:2014/07/21(月) 07:10:14.73 ID:???
まとめると、XSSに十分気をつけていればinnerHTML使っても全く問題ないと
576Name_Not_Found:2014/07/21(月) 07:23:56.60 ID:???
NO
577Name_Not_Found:2014/07/21(月) 07:36:01.48 ID:???
innerHTMLのリスクとデメリットを分かっていたら問題ないでFA
578Name_Not_Found:2014/07/21(月) 08:23:02.22 ID:zKuuycwC
>>572
>>573-574の指摘通り
過去何度も話題にあがっていたはず
579Name_Not_Found:2014/07/21(月) 08:45:36.22 ID:???
既存のDOMの参照がなくなる・・・ってそれただの把握できてないアホ
どうせ前にDOMが壊れるって騒いでたやつだ
580Name_Not_Found:2014/07/21(月) 08:53:45.95 ID:???
把握できてるからこそだと思うが・・・
581Name_Not_Found:2014/07/21(月) 08:53:56.01 ID:???
想定していたものじゃなくなるって意味だろ
アクロバティックな解釈して頓珍漢な批判をする馬鹿が最近多いな
582Name_Not_Found:2014/07/21(月) 12:27:20.97 ID:???
>>567
> XSSも問題点の一つだが、既存のDOMノードの参照が失われる問題の方が影響範囲が大きい
それは、ノードを入れ替える以上
何を使おうが絶対発生する。

そこでjQueryがでてくる。jQueryを使っていれば、
これは問題にならない。(適切に処理してくれる。
583Name_Not_Found:2014/07/21(月) 12:37:36.14 ID:???
どのレスをみても「何故」がみえてこないな
サンプルコードを書いてみてくれんか
584Name_Not_Found:2014/07/21(月) 13:47:25.22 ID:???
分からないなら多分問題ないよ
ある程度複雑な処理をしてないと問題出ないから
585Name_Not_Found:2014/07/21(月) 13:51:53.66 ID:???
その複雑な処理が何かって話なんだが、
結局、問題が出るコードはだせないんだね。

ここまででみんな気づいたと思うけど、
問題は全くありません。
586Name_Not_Found:2014/07/21(月) 14:20:02.85 ID:???
経験のある技術者には分かることだから
いちいち例を出すのが面倒なだけだろ
まぁ、思いたいように思えばいいんじゃね
587Name_Not_Found:2014/07/21(月) 14:29:13.27 ID:???
コードひとつ書けないこの人はたぶん次はこれを見ろよと英文サイトを出してくる
でも内容的には的外れで突っ込まれて逃げる
588Name_Not_Found:2014/07/21(月) 14:44:55.39 ID:???
俺は経験ある技術者だけど、
DOMの参照がどうたらいう問題は
今まで起きてないよ。
589Name_Not_Found:2014/07/21(月) 14:47:30.52 ID:???
起きたか起きてないかじゃなくて
理解できるかできないか。
経験ある技術者は理解できる。
590Name_Not_Found:2014/07/21(月) 16:01:51.68 ID:???
ん? 理解した上で起きないって言ってるんだけど。
ガベージコレクタって知ってる?
591Name_Not_Found:2014/07/21(月) 16:08:05.88 ID:???
いやそんな話してないしw
分かってねーじゃん。
592Name_Not_Found:2014/07/21(月) 16:34:08.68 ID:???
JSで、新しいウインドウを開き、
データを文字にしたものをそこに出力する
をしたいです
どうしたらいいですか?
593Name_Not_Found:2014/07/21(月) 16:52:25.47 ID:???
>>592
意味が分からんがエスパーするとwindow.opener
594Name_Not_Found:2014/07/21(月) 18:04:50.19 ID:???
ありがとうございます
595Name_Not_Found:2014/07/21(月) 18:35:12.08 ID:???
>>591
じゃあ、おまえが何の話してるか言えよ。
わかってるんだろ?

それを言わないから、問題が起きたんだーっていっても
何の話だと思う?何の話かは言わねぇwww。ってなってるから
誰もおまえの言うことを信じてないんだぞ
596Name_Not_Found:2014/07/21(月) 18:36:56.68 ID:???
>>593
逆じゃね?

>>592
window.openしたら、openしたwindowを返すから、
そのwindowに書き込めばいい。
597Name_Not_Found:2014/07/21(月) 19:10:38.48 ID:???
>>595
だから分からないならいいんじゃねって言ってるだろ
分からないことは責めてないから。
頓珍漢な絡み方をしてくることを責めている
598Name_Not_Found:2014/07/21(月) 19:11:41.41 ID:???
よくwindow.openって書かれますが、
windowいらなくないですか?
何でwindow書くのですか?
599Name_Not_Found:2014/07/21(月) 19:16:06.71 ID:???
参照していたものが失われる可能性がある

ガベージコレクタが回収するから問題ない

なんだこれ
600Name_Not_Found:2014/07/21(月) 19:16:58.13 ID:???
「参照先」に訂正するわ
601Name_Not_Found:2014/07/21(月) 19:22:54.31 ID:???
>>598
openでは汎用過ぎて、なんのopenなのか
わからないから。

コードというのは意図をわかりやすくするのが重要で、
コンピュータにとって問題ないからって省略した方がいいとは限らないんだよ。

コードを読むのは人間なんだから。
602Name_Not_Found:2014/07/21(月) 19:44:19.45 ID:???
MS-Windowsじゃなくてもwindowってつかえるの?
603Name_Not_Found:2014/07/21(月) 20:43:40.17 ID:8atMqUtx
>>582
innerHTML の本質は「上書き」であって「書き換え」ではない
書き換える必要のないDOMノードまで強制的に上書きするのがinnerHTMLの欠点であり、細心の注意を払う必要がある
http://jsfiddle.net/Pc87X/

上記URLは明確に干渉するコードだが、仮にコーディング時に function runInnerHtml が存在しなかったとしても innerHTML は使わないほうが良い
そうすれば将来的に #Test を参照するコードを書いても問題は発生しないからだ
後々の事も考慮して出来るだけDOMの書き換え対象を小さくする方が安全なコードとなる

> jQueryを使っていれば、これは問題にならない。(適切に処理してくれる。
jQuery は DOM 書き換えにおいて innerHTML 系の処理に頼っており、この手の最小限の書き換えは不得手とする分野だと思うのだが…
例えば、テキストノードの値だけ変更する操作は jQuery には出来ないと思う
もし、jQueryで解決する方法があるのなら是非伺いたい
604Name_Not_Found:2014/07/21(月) 20:56:42.91 ID:???
jQueryって要素の操作は得意だけど
nodeの操作はあんまりだね
605Name_Not_Found:2014/07/21(月) 21:06:58.36 ID:???
また頓珍漢な反論が出てきそうなので釘をさしておこう

jQuery の .text() は textContent の代替であってテキストノード値の書き換えではない
http://api.jquery.com/text/
606Name_Not_Found:2014/07/21(月) 21:07:01.30 ID:???
あんまりっていうか全然じゃね
607Name_Not_Found:2014/07/21(月) 21:17:38.07 ID:???
nodeTypeを数字で判定すると、
その数字が何だったのか後から見た時に分からないです
nodeTypeを定数として持ってるオブジェクトはないんですか?
608Name_Not_Found:2014/07/21(月) 21:22:18.80 ID:???
>>607
Node.ATTRIBUTE_NODE とか、DOM Interface オブジェクトを利用しては?
なかったら自前で作る
609608:2014/07/21(月) 21:23:32.94 ID:???
ああ、というか Node 使わなくても全てのノードで参照できるな
610608:2014/07/21(月) 21:29:20.45 ID:???
IE8- をサポートするなら自前で作る必要があるか
611Name_Not_Found:2014/07/21(月) 21:30:49.30 ID:???
>>603
初学者なりに見てみたんだけど確かに注意すべき問題だけど
addEventListenerが結果を保持するところとinnerHTMLが持ってくるところが違うから起きる現象に見える
// addEventListenerで追加しないで onClickで仕込むと>>603のいう問題な動作は起きないところからそう見た

上書きか書き換えか、とか、壊れる、とかいうと予想外の期待されない動作みたいなニュアンスがあるけど
実際は「まー当然こうなるよね」というふうな動作に見えるのだけど、そうではないのかな?
612Name_Not_Found:2014/07/21(月) 21:58:13.30 ID:8atMqUtx
>>611
確かにイベントが解除される問題は <strong id="Test" onclick="changeBackgroundColor(event);"> で回避できる
しかし、その場合も #Test の要素ノードをクロージャでキャッシュしていた場合は参照が切れる
重要なのは参照が切れてしまう事であってイベントの問題が回避できれば解決するわけではない
(他にも参照を利用したコードはあるだろう)

同様の問題は textContent にもある
テキストノードをキャッシュしていたら textContent で上書きすれば参照が切れる
Text#data で値を書き換えれば、参照は切れないので問題は発生しない
テキストノードの間に要素を挟んでテキストノードを分割するなら新しいテキストノードを作成すべきだが、既存のテキストノードを流用できるなら流用した上で値の書き換えにとどめたほうが良い

> 実際は「まー当然こうなるよね」というふうな動作に見えるのだけど、そうではないのかな?
「当然の事象」を理解した上で問題点の少ないコードを模索するのが良いプログラマだと思う
613Name_Not_Found:2014/07/21(月) 23:07:40.21 ID:???
>>603
> innerHTML の本質は「上書き」であって「書き換え」ではない
> 書き換える必要のないDOMノードまで強制的に上書きするのが

は? 当たり前じゃん。 当たり前じゃん。

欠点でも何でもねーよ。

HTMLの中身を入れ替えるんだから変わるに決まってるじゃん。

びっくりした。あまりにも馬鹿すぎて。
614Name_Not_Found:2014/07/21(月) 23:10:35.26 ID:???
当たり前の事を分かって無い奴がどんだけいるんだろうな
615Name_Not_Found:2014/07/21(月) 23:10:46.07 ID:???
単なる$.html()でイベントが消える・・・というか
入れ替えるhtmlにイベント書いてないから当たり前なんだが、
それが嫌なら、$.clone()使えばいいだけ。

http://js.studio-kingdom.com/jquery/manipulation/clone

[withDataAndEvents] boolean値で、マッチしている要素に付随している
イベントハンドラもコピーするかどうかを決定します。 jQuery1.4からは保持しているdataも同様にコピーの対象になります。

(初期値はfalseでしたが、jQuery1.5でtrueになり、jQuery1.5.1で再度falseにもどされました。)
[deepWithDataAndEvents] boolean値で、マッチしている要素の全ての子要素に対しても、
付随しているイベントハンドラとDataをコピーするかどうかを決定します。 この初期値は1つ目の引数と同じになります。
616Name_Not_Found:2014/07/21(月) 23:16:22.25 ID:???
>>612
onClickの話は別に解決策を提示したわけではないよ
それで、あらためて>>533をみてなるほどと思いかけたけど、となると
消えたように見えるリスナーはどこにいっちゃったのか、消滅したわけじゃなさそう

それと、innerHTMLとかinnerTextって書くの楽だし
jQueryをはじめいろんなところで使われまくってるから
使わないじゃなくて、問題点を理解して使っていくうえで賢いやり方とかあるかな?
今って参照を保持したり動的にイベント制御したりがどのくらい頻繁に出てくるのか知らないけど

> 「当然の事象」を理解した上で〜〜
いや、言葉の使い方の話
617Name_Not_Found:2014/07/21(月) 23:25:01.84 ID:???
innerHTMLもhtmlも、「HTML文字列」から
新しいHTMLを生成するもので、イベントハンドラが
HTML文字列に書いてないから、イベントハンドラがないの当たり前だろ。

そういう風に動的に追加される要素にイベントハンドラを付けたいなら
個々に追加する(面倒な方法)か、親要素にイベントハンドラ設定するのが常識。
たとえば $(document).on('click', セレクタ, function() {・・・}) みたいに。

> 消えたように見えるリスナーはどこにいっちゃったのか、消滅したわけじゃなさそう
だから消滅するって。ガベージコレクションって書いただろ。
どこからも参照されなくなれば消える。
618Name_Not_Found:2014/07/21(月) 23:25:54.10 ID:???
innerHTMLやjQueryのhtml()には欠点があるのではなく
注意点があるだけの話。いやはや馬鹿だった馬鹿だったw
619Name_Not_Found:2014/07/22(火) 00:08:55.56 ID:HZZvAY0t
>>615
そのまま使えばいいのになぜ clone() するんだよ
>>612を全く読んでないな
620Name_Not_Found:2014/07/22(火) 00:37:31.52 ID:???
当たり前の事実を目にして、改善するか、何もしないか、の違いだな
621Name_Not_Found:2014/07/22(火) 01:24:41.34 ID:???
やる必要がないことをやらないのは大事だ
やる必要をなくすことも大事だ
622Name_Not_Found:2014/07/22(火) 01:25:33.54 ID:???
まる一日使って613でようやく飲み込むとか本当に馬鹿だな
623Name_Not_Found:2014/07/22(火) 03:18:02.49 ID:???
>>602
別にwindowってWindows固有の用語じゃないしな…
例えばLinuxやUnixの世界にはX Window Systemってのがあるし
jsってgcあるんですね
625Name_Not_Found:2014/07/22(火) 06:45:16.91 ID:???
>>621
理解した上でその判断なら君は本物の馬鹿だ
626Name_Not_Found:2014/07/22(火) 06:52:21.28 ID:???
今年工業高校卒業予定なんですが愛知でインターンシップみたいなのって無いですか
627Name_Not_Found:2014/07/22(火) 07:33:06.29 ID:???
>>621
参照を切らなければ、参照を保持している事を記憶する必要がない
やる必要をなくすことは大切だな
628Name_Not_Found:2014/07/22(火) 08:14:24.14 ID:FatvFhxq
>>616
> 消えたように見えるリスナーはどこにいっちゃったのか
addEventListener に Listener は登録されているので消えているわけではないが、documentとの参照は切れる
もう一度、document にノードを appendChild すればイベントが発火するはず

> それと、innerHTMLとかinnerTextって書くの楽だし
innerText は IE の独自拡張で標準化されていない
使うなら textContent だ

> jQueryをはじめいろんなところで使われまくってるから
最も賢い方法は参照を切らない事だ
jQuery を使うなら olugin を書く必要がある
http://jsfiddle.net/Pc87X/1/

> 問題点を理解して使っていくうえで賢いやり方とかあるかな?
innerHTML を使うなら問題を回避できないので、以下に早く不具合を発見するか、が重要
いくつか考えられるが、今は時間がないので後で後述す
629Name_Not_Found:2014/07/22(火) 12:48:11.42 ID:???
>>628
> addEventListener に Listener は登録されているので消えているわけではないが、documentとの参照は切れる
> もう一度、document にノードを appendChild すればイベントが発火するはず

ノードとそのノードのイベントハンドラが消えるタイミングを勘違いしてるよ。
まずイベントハンドラが消えるタイミングはノードが消えた時。

ここまではいいよね?

じゃあノードが消えるのはいつかというと、documentから消した時じゃない。
documentから消して、さらにJavaScripのどこからも参照がない時。

DOMからremoveChildしたりinnerHTMLで消して、かつ
JavaScriptのどこからも参照されなくなった時にイベントハンドラは削除される。

JavaScriptのどこからも参照がなくなった時だから、
これをJavaScript内で検知するのは不可能。


> innerHTML を使うなら問題を回避できないので、
だからなんの問題?
630Name_Not_Found:2014/07/22(火) 13:17:05.97 ID:???
ということで、>>628をjQueryとhtml()メソッドを使って、
イベントが解除されないという証拠です。

http://jsfiddle.net/Pc87X/2/

テキスト以外の部分も書き換える可能性があるから
全く同じじゃないが、今の本題はhtml()でメソッドが
解除されるかどうかだから。

ついでにここにもコピペしとく

(function () {
 function changeBackgroundColor () {
  this.style.backgroundColor = this.style.backgroundColor ? '' : 'orange';
 }

 function runInnerHtml () {
  var str = $('body').html();
  str = str.replace('テスト', 'JavaScript');
  $('body').html(str);
 }

 $('#Test').on('click', changeBackgroundColor);
 $('#ClickMe').on('click', runInnerHtml);
}());
631Name_Not_Found:2014/07/22(火) 13:53:36.04 ID:???
>>630はhtml()使ってもイベントハンドラが消えないという証拠として書いたもので
しかもなるべくオリジナルに近い形にしたので俺的には気に入らないコードだった。

普通に書いたらこうかな。ってことでついでにちゃんと書いたよ。

http://jsfiddle.net/Pc87X/4/

短いので、ここにもコピペしておく。

$(function () {
 $('#Test').on('click', function () {
  this.style.backgroundColor = this.style.backgroundColor ? '' : 'orange';
 });

 $('#ClickMe').on('click', function () {
  $('*').contents().filter(function() {
   return this.nodeType === 3;
  }).each(function() {
   this.textContent = this.textContent.replace('テスト', 'JavaScript');
  });
 });
});
632Name_Not_Found:2014/07/22(火) 13:55:12.82 ID:???
あ、今気づいたが、getElementById('SampleText')で
対象を絞り込んでたのねw

まあ適当に補完しといてくれ。
633Name_Not_Found:2014/07/22(火) 14:27:47.80 ID:???
いやー、悪い悪い >>630は自分で書いててて
なんで動くんだって思ったんだw
間違えてたな。うん。動かない。

訂正した奴はこっち。もちろんhtml()は使ってるから安心してな。
やってることは>>617で説明したとおり
http://jsfiddle.net/Pc87X/5/

(function () {
 function changeBackgroundColor () {
  this.style.backgroundColor = this.style.backgroundColor ? '' : 'orange';
 }

 function runInnerHtml () {
  var str = $('#SampleText').html();
  str = str.replace('テスト', 'JavaScript');
  $('#SampleText').html(str);
 }

 $(document).on('click', '#Test', changeBackgroundColor);
 $(document).on('click', '#ClickMe', runInnerHtml);
}());
634Name_Not_Found:2014/07/22(火) 14:34:41.88 ID:???
>>633
html()でイベントが消えないのは分かったが
そのコードだと $('#SampleText')[0].innerHTML = str; でも動いちゃうけどな?
635Name_Not_Found:2014/07/22(火) 14:52:09.04 ID:???
対象のノードの子にあたるノードに対して、スクリプト側で動的にイベントハンドラを設定したり参照を持ったりしていると
innerHTMLを使用したときに、子ノードに設定したイベントハンドラや持ってる参照が消えてしまいますよ
二行でええやん
636Name_Not_Found:2014/07/22(火) 18:30:26.67 ID:???
>>635
っていうか、少し考えればわかることなんだが。

中身を入れ替えてるわけだから、当然新しいものになるわけで、
古い方に割り当てたイベントハンドラは、新しいものにはついてない。
これは別にinnerHTMLのバグでも問題でも何でもなく常識的な動き。

だから新しくイベントハンドラを割り当てるか、親要素にイベントハンドラを
割り当てるかすればいいだけ。

これはinnerHTMLを使うときは、これを見逃さないでねってだけで
innerHTMLを使っちゃいけない理由でもなんでもないよ。

っていうのは、最初っからみんな言ってる話なんだよ。
使っちゃいけない理由はないって。
637Name_Not_Found:2014/07/22(火) 18:32:14.15 ID:???
>>634
何か問題あんの? html()は内部でinnerHTMLを
使ってるんだからあたりまえだと思うが。
638Name_Not_Found:2014/07/22(火) 18:43:45.17 ID:???
ボックスからスクロールバーのサイズを引いたwidthを取得したいのですが
どうやればいいでしょうか?
639Name_Not_Found:2014/07/22(火) 18:48:00.29 ID:7RqdhX7u
>>628
> documentから消して、さらにJavaScripのどこからも参照がない時。
この点では私とあなたで意見の相違はないと思うのだが…

>>633
バブリングで上位ノード監視の手法は知っているし、後述する予定だったが、参照が切れることに変わりはないはず
ようはイベントがはがれる事だけが問題ではないのだが
帰宅中なので詳細は後程
640Name_Not_Found:2014/07/22(火) 18:57:15.54 ID:???
> 参照が切れることに変わりはないはず
参照が切れる切れるうざくね?
なんでそんなものに執着してるのか。

中身を新しいものに入れ替えてるんだから
別物になっただけだよ。全然難しい話じゃない。

そういう動きになるってだけでそれで問題ないなら、なにも問題ないだろ。
少し盲点になるかもねーってだけの話でしか無い。

古いものを無くしたいのなら(だからinnerHTML使ってるわけで)
むしろ消えてなくなった方がいい場合も多い。
たとえば、<select>要素の<option>をinnerHTMLで入れ替えるのに
ほとんどの場合なんの問題もねーよな?

あんたは、中身を少し書き換えることしか頭にないから参照参照とうざいけど
中身を完全に入れ替えて全く違うものにした時、前のデータが残っているほうが不自然だろ。
641Name_Not_Found:2014/07/22(火) 18:58:32.50 ID:???
へんなやつと絡むから話がこじれるんだよ・・
分からなきゃ分からないでいい、で終わる話
何を言っても納得しないし意味ないよ
642Name_Not_Found:2014/07/22(火) 19:10:38.87 ID:???
これ単なる初心者の質問でしかないから。
すごく丁寧に解説すると

【質問】
element.innerHTML = element.innerHTML.replace(テキスト修正);
って書いたら、element.innerHTMLの中に設定していた
イベントハンドラが動かなくなりました。どうしてですか?

【回答】
element.innerHTML の中身を新しいHTMLに入れ替えたのだから
当然中身は新しくHTML(DOM)になります。

たとえば
element.innerHTML の中に '<a href="hoge">link</a>'; があって
element.innerHTML ='<button>button</button>'; を実行したら
aが消えてなくなるのは当たり前だし、aに設定していたイベントハンドラ
などもなくなるのは当たり前です。

中身をちょっとだけ変えた、element.innerHTML ='<a href="hoge">link2</a>'; を
実行したとき、それを元のaと同じとみなすべきかはわかりません。
よってイベントハンドラを引き継ぐべきかどうかもわかりません。

代入したものは新しいHTMLなのですから、そこに書いているもの以外は初期状態です。
643Name_Not_Found:2014/07/22(火) 19:12:34.07 ID:???
innerHTMLの中身を別物に入れ替えてるんだから
参照は切れるべきでしょ。むしろ残す方がおかしい。
644Name_Not_Found:2014/07/22(火) 19:15:31.40 ID:???
常識を持ち出すならObject型が参照なのは常識
addEventListener 以外にも参照を保持するメソッドが定義されている事は十分に想像できるはずだがな
プリミディブ型のように文字列でゴリゴリ処理する方が不自然だって事が感覚としてわからないなら、その程度の実力って事なんだろうな
645Name_Not_Found:2014/07/22(火) 19:19:18.12 ID:???
>>643
参照を切らなくて済むなら切らないほうが良いに決まってるでしょ
646Name_Not_Found:2014/07/22(火) 19:21:02.02 ID:???
今日になっていきなり当然だろ当然だろ連呼しだしたやつも怪しいもんだな
647Name_Not_Found:2014/07/22(火) 19:23:13.00 ID:???
innerHTMLを使わなければ参照が切れない状況ならinnerHTMLを使わないほうが良い
常識で考えればすぐ分かるはずだがな
648Name_Not_Found:2014/07/22(火) 19:27:35.02 ID:???
むしろ逆に考えて
子ノードを持っているノードについて操作したい場面はどのくらいあるのか?
このとき子ノードに対して何かしているケースはどのくらいの割合か?

たいしたことしてない俺の経験上ではいずれもほとんど無かったがお前らどうよ
649Name_Not_Found:2014/07/22(火) 19:33:34.99 ID:???
>>645
> 参照を切らなくて済むなら切らないほうが良いに決まってるでしょ
中身が別物になってるんだから、同じものを指すべきじゃない。

>>646
いや、やっとこの馬鹿が言ってる「問題」が判明したからだよ。

中身を違うものに入れ替えてるのに、前の情報を保持したい?
そんなアホなことを言ってるとは思わなかったよ。
650Name_Not_Found:2014/07/22(火) 19:36:00.89 ID:???
>>647
> innerHTMLを使わなければ参照が切れない状況ならinnerHTMLを使わないほうが良い

考える順番がおかしい。

最初に考えるべきなのは、中身を新しいものに入れ替えたいのか、
中身は同じで、その属性を変えたいだけなのか。

これを最初に考えるべきでしょうが。
そしてやりたい事にあった命令を使うだけの話。
651Name_Not_Found:2014/07/22(火) 19:36:47.11 ID:???
>>633
"この文章をクリックすると TEXT_NODE 値を置換する。" が大嘘すぎる
tagNameや属性値も置換対象に入ってる
TEXT_NODE のみを置換対象にすべき
652Name_Not_Found:2014/07/22(火) 19:38:31.86 ID:???
>>637
html()はイベントとか切れないように色々工夫してるんだが?
問題点分かって無い奴はレスすんな
653Name_Not_Found:2014/07/22(火) 19:39:19.74 ID:???
>>649
> 中身を違うものに入れ替えてるのに、前の情報を保持したい?
おまえのいう「中身」を違うものに入れ替える必要がない事は http://jsfiddle.net/Pc87X/1/ で証明されているわけだが、おまえの目は節穴なのか?
654Name_Not_Found:2014/07/22(火) 19:40:45.89 ID:???
だらだら書いてるわりに実質ちょっと言い換えただけのありがたい説明文はいらねーよ
655Name_Not_Found:2014/07/22(火) 19:42:05.36 ID:???
他の質問が流れるからモンスター質問者に関わるのも考え物
656Name_Not_Found:2014/07/22(火) 19:46:10.89 ID:???
>>644
> プリミディブ型のように文字列でゴリゴリ処理する方が不自然だって事が感覚としてわからないなら、その程度の実力って事なんだろうな
これは文字列かどうかの問題じゃない。
innerHTMLに新しい文字列を代入するというのは、新しい文字列から生成したオブジェクトに入れ替えてるのと同じ。

obj = new Object;
obj.prop = 1;

obj = new Object;
console.log(obj.prop); // 1と表示されないじゃないか!

って言ってるのと同じ。

innerHTMLを新しいオブジェクトに入れ替えたのだから、その子オブジェクトも入れ替わる。
document.createElementを使った方法であっても、新しく作った要素に入れ替えたのなら、
古い要素のイベントハンドラは消える。


あと、HTMLを扱うときは、文字列で扱ったほうが速い。なぜなら単なる文字列は
メモリ内で終わる作業だから、重いDOMツリーの更新は必要ないし、
ブラウザの機能としてHTMLのパースは、もっともよく使う部分で、一番最適化されているから。

そういうこともわからない程度の実力かい?
657Name_Not_Found:2014/07/22(火) 19:47:57.57 ID:???
>>653
innerHTMLは、中身を入れ替える命令。

中身を入れ替えたくないのなら、innerHTMLを使うのが馬鹿だし、
中身を入れ替えたいなら、innerHTMLを使うのが良い。

そんな使い分けもできないの?

君は、最初にやりたい事をはっきりさせてから、
プログラムしようね。目的に合わない命令を使って
わーわー騒ぐんじゃない。
658Name_Not_Found:2014/07/22(火) 19:48:42.82 ID:???
>>652
> html()はイベントとか切れないように色々工夫してるんだが?

してません。
659Name_Not_Found:2014/07/22(火) 19:51:09.40 ID:???
>>658
それは俺も思った
工夫しているのは .on() だよな
660Name_Not_Found:2014/07/22(火) 19:51:10.42 ID:???
スレが質問こなさそうな状況だからいうが
質問と真っ当な回答を抜き出して検索性インデックス性をなんとか作り出してナレッジベース化したら役に立つだろうか
661Name_Not_Found:2014/07/22(火) 19:59:55.81 ID:???
>>656
> あと、HTMLを扱うときは、文字列で扱ったほうが速い。なぜなら単なる文字列は
> メモリ内で終わる作業だから、重いDOMツリーの更新は必要ないし、
> ブラウザの機能としてHTMLのパースは、もっともよく使う部分で、一番最適化されているから。

そうなんだよね。俺も十数年ぐらい前は、たとえばテーブルを作るのに、
tableをcreateElementして、trをcreateElementして、tdをcreateElementして
appendChildを繰り返して・・・ってDOM操作で何行もかけて作っていた
時もあったけど、今は遅いし面倒なだけなので文字列で生成している。

innerHTML = '<table><tr><th>header</th><td>data</td></tr></table>';

これをDOM操作で作っても重いし面倒なだけ。何一つメリットがない。

さらに言えば、文字列の連結も一が多くなると見難くなるから、
少し複雑なのはlodashのtemplate機能を使ってるよ。
662Name_Not_Found:2014/07/22(火) 20:02:13.92 ID:???
>>658-659
両方している
663Name_Not_Found:2014/07/22(火) 20:07:14.83 ID:???
html()がやってるのは、中身を入れ替えた時に消える古いオブジェクトに対して
ブラウザの不具合によるメモリリークな問題に対応する処理で、
イベントハンドラは普通に切れる。
664Name_Not_Found:2014/07/22(火) 20:55:18.88 ID:???
>>657
> 中身を入れ替えたくないのなら、innerHTMLを使うのが馬鹿だし、
>>649で「中身が別物になってるんだから、同じものを指すべきじゃない。」と発言しているのはなぜ?
別物にする必要がないでしょ?
665Name_Not_Found:2014/07/22(火) 21:01:54.70 ID:9sE25qaT
参照が切れると動かない事例として jQuery.data() がある

参照が切れないコードなら問題はない
http://jsfiddle.net/Pc87X/7/
jQuery の .html() を使用すると参照が切れて、jQuery.data() が期待通りに動作しなくなる
http://jsfiddle.net/Pc87X/9/

>>612で説明したノードのキャッシュも原理的には同じ問題だ

>>633
少なくとも、http://jsfiddle.net/Pc87X/1/http://jsfiddle.net/Pc87X/7/ では参照を切る必要がなかった
>>649の言葉を借りるなら「中身を入れ替える必要がない」というのだろうか
だから、この場合は「innerHTML や .html() を使うべきではない」といえる
666Name_Not_Found:2014/07/22(火) 21:06:04.69 ID:???
>>664
まあ大抵はIDに対してイベントハンドラ付加したりしてるから、直感的にはそう思っても仕方ない
けどイベントハンドラの設定も参照の作成もIDが必須になっているわけではない
なので内部構造としてノード・ツリー構造があるわけで、IDは表面上の操作と内部の位置とを橋渡ししているに過ぎない

こういう状況の中で、.innerHTMLで要素の中身を入れ替えたり操作したりするとき、
入れ替える前と後で、中身が持っている子要素が同じであるかどうかを保証するわけにはいかない
だからイベントハンドラは消失するし参照も切れる、それが当然の動作になってしまう
(付加したイベントハンドラは理論上すぐ消えるはずだけど、個人的になぜかそうとは限らないように思う)


…と、自分はこういうふうに理解してるけど、間違いあるかな
667Name_Not_Found:2014/07/22(火) 21:06:34.55 ID:???
>>664
> 別物にする必要がないでしょ?

なんで決め付けるの?

別物にしたいときは、別物。そうでない時は、そうでない。
別物にしたいときは、イベントが残っていたら大問題。

html()、innerHTMLを使うかどうかは、
どっちが目的かで変わるわけで、
なんで最初の目的を限定してから使えないって話するの?
意味がわからない。
668Name_Not_Found:2014/07/22(火) 21:07:42.94 ID:???
>>655
> jQuery の .html() を使用すると参照が切れて、jQuery.data() が期待通りに動作しなくなる

だからさ、それは「問題」じゃないんだって、

html()の仕様として、要素を丸ごと入れ替えるものだから
data()は消えるのが仕様として正しい。

なんで、目的にあってないものを使ってるくせに
それが問題だっていうのさ。馬鹿じゃん?
669665:2014/07/22(火) 21:08:01.79 ID:9sE25qaT
蛇足だが、http://jsfiddle.net/Pc87X/5/ はテキストノード値の置換ではない(>>651の指摘通り)
私が http://jsfiddle.net/Pc87X/ で挙げた悪例をそのまま流用していると思われるが、良い実装ではないので http://jsfiddle.net/Pc87X/9/ では正規表現でテキストノード部分を置換するようにしている
そもそも、innerHTML はテキストノード値の置換に向いていないし、他のAPIを使うべきとは思うのだが、jQuery には適切なAPIが存在しないな
670665:2014/07/22(火) 21:10:49.61 ID:9sE25qaT
>>668
> なんで、目的にあってないものを使ってるくせにそれが問題だっていうのさ。
>>633が問題ないと主張するから反論しているだけなのだが…
文句は>>633にいってくれ
671Name_Not_Found:2014/07/22(火) 21:10:56.93 ID:???
innerHTMLは要素オブジェクトをまるごと入れ替えるという
仕様なのだから、その要素に結びついたデータは消えるのが正しい動き。
それは正しいまともな仕様なので、バグではない。
672Name_Not_Found:2014/07/22(火) 21:12:06.97 ID:???
>>670

>>633は問題ないでしょ?

あんた、dataも一緒でなければならないという
条件を最初に提示したかい?
673Name_Not_Found:2014/07/22(火) 21:14:43.20 ID:???
innerHTMLやjQueryのhtml()もそれ自体に問題があるわけではなく、
要素を入れ替えるという仕様なんだからそれに付随するデータも消える。

この仕様で問題があるかどうかは要件によって変わるので、
一概に問題があると決め付けることは出来ない。
いい加減に理解しようぜ。
674Name_Not_Found:2014/07/22(火) 21:14:50.96 ID:???
$obj.innerHTML += 'test';
とかしたとき、イベントハンドラが失効したり参照が切れたりするのは
JavaScriptのコード打っていると面倒に思うことがあるのは確かだろうけど

仕様作る側やブラウザの実装やる側に立って考えると
これを失効しないように参照が切れないように作るのってすごく大変そう
675Name_Not_Found:2014/07/22(火) 21:16:49.74 ID:???
> 参照が切れる切れるうざくね?
> なんでそんなものに執着してるのか。
これが発端だろ
参照が切れる問題点が全く分かっていない奴に説明してるだけだろ
676Name_Not_Found:2014/07/22(火) 21:18:21.25 ID:???
>>674
大変じゃなくて不可能

innerHTMLはHTMLを代入する命令なのだから
HTMLとして表現できるもの以外には対応できない。

そういう仕様。
677Name_Not_Found:2014/07/22(火) 21:18:39.25 ID:???
>>671
バグとは誰も言ってない
仕様なのは皆分かってる
678Name_Not_Found:2014/07/22(火) 21:19:30.39 ID:???
>>675
だから参照が切れるのは問題点じゃないんだって言ってるだろ。
第一、参照が切れてるんじゃない。

全く別のオブジェクトに入れ替えてるんだから、
そもそも参照が最初っから存在しないんだよ。
679Name_Not_Found:2014/07/22(火) 21:20:51.16 ID:???
>>677
”正しい”仕様な。

どうも正しい仕様なのに、
それが問題であるかのように
言ってる奴がいる。
680Name_Not_Found:2014/07/22(火) 21:22:06.20 ID:???
> 全く別のオブジェクトに入れ替えてるんだから、
> そもそも参照が最初っから存在しないんだよ。
これは酷い
681Name_Not_Found:2014/07/22(火) 21:22:25.81 ID:???
innerHTMLは、新しいHTMLオブジェクトに入れ替えたい時に
使うもので、新しいHTMLオブジェクトに入れ替えるのだから
イベントハンドラもdataも初期化された状態になってほしいね。
682Name_Not_Found:2014/07/22(火) 21:23:31.75 ID:???
>>679
じゃあ、eval 使えば?
683Name_Not_Found:2014/07/22(火) 21:26:31.52 ID:???
>>680

ひどくないんだが?

element.innerHTML に代入するということは、
新しい要素オブジェクトをcreateElementして、
elementの子供を新しい要素に入れ替えることと
全く同じだよ。

擬似命令で書くなれば
element.innerHTMLObject = document.createElement('a');
みたいなもの。

document.createElement('a')した結果に
イベントハンドラがついているかい?
最初っからついてないだろ。

innerHTMLが内部で、文字列から新しい要素オブジェクト郡を作成して
それに入れ替えてるだけってのが、わかってない。
684Name_Not_Found:2014/07/22(火) 21:26:42.30 ID:???
>>679
正しさの判断基準はどこにあるんだよ
逆に「間違った仕様」があるのか?
685Name_Not_Found:2014/07/22(火) 21:28:24.10 ID:???
'a' が顔文字にみえる
686Name_Not_Found:2014/07/22(火) 21:30:41.87 ID:???
>>684
正しい仕様っていうのは、

innerHTMLを取得した時にそれはHTML表現を取得するものであって
DOM要素をシリアライズしたものではないということ

つまりHTMLで表現でされているものだけが取得され
HTMLでない情報は存在しない。

だって、その名の通り inner "HTML" なのだから。

そこにHTMLで定義してない情報まで
シリアライズされるべきだと思ってるのが「間違った仕様」
687Name_Not_Found:2014/07/22(火) 21:43:07.57 ID:???
>>638
Element.clientWidth,
Element.clientHeight
かな
688Name_Not_Found:2014/07/22(火) 21:45:18.24 ID:???
>>687
ありがとうございました
689Name_Not_Found:2014/07/22(火) 21:45:36.76 ID:???
それは正しい仕様ではなくただの「仕様」、間違った仕様ではなく「間違った認識」である

>>683
長文書いてるところすまんけど
> そもそも参照が最初っから存在しないんだよ。
こんなこと書いてるから「お前参照とか使ったことないだろ」って突っ込まれたんじゃないのかい
参照を作る→参照先が消滅(&別の新しい要素が生まれる)→作った参照が失われる
この流れを話してるのに「参照が最初っから存在しない」は無いわ、と
690Name_Not_Found:2014/07/22(火) 21:48:29.30 ID:???
意地になってるだけの奴に何言っても無駄だろ
691Name_Not_Found:2014/07/22(火) 21:56:12.59 ID:???
GCの原理が理解出来てないんだろうなあ
692Name_Not_Found:2014/07/22(火) 22:10:16.02 ID:???
text-overflow: ellipsis;
で省略されているかされていないかを判定するにはどうしたらいいでしょうか?
出来ないなら、自前で同じことをするしかないと思いますが・・
693Name_Not_Found:2014/07/22(火) 22:10:26.74 ID:???
>>689
innerHTMLに代入する値はただの文字列で、
代入した後に内部で処理されるまで
オブジェクトの参照は存在しませんが?

元々の参照とは全くの別なんだ?
それをわかっていて代入してるんだが?
innderHTMLに代入するということは
別のオブジェクトを作ろうとしてるんだよ。

イベントハンドラとかdataとかリセットされるべきじゃないか。
694Name_Not_Found:2014/07/22(火) 22:11:29.02 ID:???
ほんと何言っても無駄だな
695Name_Not_Found:2014/07/22(火) 22:18:46.53 ID:???
>>692

> 出来ないなら、自前で同じことをするしかない
なんで?
696Name_Not_Found:2014/07/22(火) 22:18:47.08 ID:9sE25qaT
>>616
遅くなってすまなかった

> 問題点を理解して使っていくうえで賢いやり方とかあるかな?
最も確実なのは「全てのノードを置換しなければ実現できない状況でのみ innerHTML を使う」になる
http://jsfiddle.net/Pc87X/1/http://jsfiddle.net/Pc87X/7/ のようにノードを置換しなくて良いケースでは innerHTML は使わない、ということだ
これなら innerHTML を使わなくても全てのノードを置換しなければいけないのだから問題はない

addEventListener の参照エラーのみに対応するならバブルするイベントは document で定義し、バブルしないイベントは useCapture を利用して document で定義すれば回避できる
ちなみに、jQueryでは useCaptuer を使えないのでバブルしないイベントには対応できない
また、http://jsfiddle.net/Pc87X/9/ のように jQuery.data() に対応できない等、完全な対策にはなっていない

---
ただし、「innerHTML が楽だ」という人は大抵、「ノードを置換しなくて良いケース」や「部分的な置換でよいケース」でもらくだからという理由で全体を置換しようとすることが多い
正直、お勧めはしないが、その場合は下記対策が考えられる

1. チームで参照を保持しているノード情報を共有する
2. 参照が切れてはいけないノードでinnerHTMLを使用した際に例外を投げる仕組みを作る(問題の早期発見)

1. はまあ、当然だな
2. は例えば、下記URLのようにする
http://jsfiddle.net/Pc87X/10/
欠点としては要素ノードの参照にしか対応できていない事か
また、addEventListener のように参照を保持するタイプのメソッドは全てユーザ定義関数でwrapする必要があるので少し手間はかかる

---
ところで、jQuery.data() のように全DOMノードにオブジェクトを格納できる DOM 仕様があって廃案になったと記憶しているのだが、該当仕様をどうしても思い出せない
どなたかご存知の方がいたら教えて頂けないだろうか?

廃案後、代替仕様が出来たかも気になっている
全ノードに js-refered フラグを付けられれば、http://jsfiddle.net/Pc87X/10/ でテキストノードの参照エラーにも対応できるのだが…
697Name_Not_Found:2014/07/22(火) 22:23:20.40 ID:???
>>695
出来ないからじゃん
何言ってんの?
698Name_Not_Found:2014/07/22(火) 22:42:16.21 ID:???
そもそも「省略されているかされていないかを判定する」必要性がわからん
699Name_Not_Found:2014/07/22(火) 22:47:26.77 ID:???
勝手に分からなけりゃいいだろ
馬鹿じゃねえの
700696:2014/07/22(火) 22:48:40.48 ID:9sE25qaT
探していたのは DOM Level 3 の Node#setUserData だった
http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-setUserData
MDN では Element#dataset か WeakMap で代替することを推奨していた
https://developer.mozilla.org/ja/docs/Web/API/Node.setUserData

> ところで、jQuery.data() のように全DOMノードにオブジェクトを格納できる DOM 仕様
jQuery.data() は要素ノード限定なので Node#setUserData の代替にはならない事に気づいた
701Name_Not_Found:2014/07/22(火) 22:59:10.78 ID:9sE25qaT
>>692
スクロールバーがあるなら scrollWidth と clientWitdh を比較してみては?
スクロールバーがないなら、Range オブジェクトで判定できる可能性がある
https://developer.mozilla.org/ja/docs/Web/API/document.createRange
702Name_Not_Found:2014/07/22(火) 23:07:48.84 ID:???
>>696
ありがとう、むしろ手間をかけさせて申し訳ない
> 全ノードに js-refered フラグを付けられれば
まさにこういう類のことを考えてたんだけど
やっぱり地道な対応しかないか…
703Name_Not_Found:2014/07/22(火) 23:15:31.79 ID:???
>>701
なるほどrangeですか・・
たしかになんとかなるかもしれません
ありがとうございました
704Name_Not_Found:2014/07/22(火) 23:17:10.44 ID:???
まだやってんの? いま来た人用にわかりやすい例え思いついたわw

innerHTMLには根本的な問題がある
代入演算子=には根本的な問題がある

innerHTMLに代入したら古い値が消えることだ
代入演算子=で代入したら古い値が消えることだ

前の値を残しておきたいときはDOM操作をしなければならない
前の値を残しておきたいときは足し算をしなければいけない

だからinnerHTMLを使ってはならない
だから代入演算子を使ってはならない


★普通の人が考えること

前の値が要らない時はinnerHTMLでいいんじゃねーの?
前の値が要らない時は代入演算子でいいんじゃねーの?

そもそも前の値を捨てて新しい値を入れる時にinnerHTMLを使うんじゃねーの?
そもそも前の値を捨てて新しい値を入れる時に代入演算子を使うんじゃねーの?
705Name_Not_Found:2014/07/22(火) 23:19:36.41 ID:???
>>696
> ただし、「innerHTML が楽だ」という人は大抵、「ノードを置換しなくて良いケース」や
> 「部分的な置換でよいケース」でもらくだからという理由で全体を置換しようとすることが多い

その前提がおかしいんだろ。
なんで置換ありきなんだ?

innerHTMLを使う時に一番多いのは、文字列で新しくHTMLを
生成するときだろ。置換なんかしねぇよ。
706sage:2014/07/22(火) 23:28:21.56 ID:???
タブレットでスクロール可能なエリアでスワイプすると、横スクロールするだけでスワイプの動作が取得できません。
どのようなコードを記載すべきでしょうか。下記のようなコードを記載しました。
<html>
<head>
<title>My Page</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script type="text/javascript">
$(function(){
$('#scrollswipe').bind('swipe', function(){
alert("swipe");
});
});
</script>

</head>
<body>
<div id="scrollswipe" style="width:200px; height:200px; overflow:scroll;">
<h1>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</h1>
<h1>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</h1>
<h1>cccccccccccccccccccccccccccccccccccccccccccc</h1>
<h1>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</h1>
<h1>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</h1>
</div>
</body>
</html>
707Name_Not_Found:2014/07/22(火) 23:32:37.19 ID:???
>>706
これ使ってる。自力実装は死ぬと思うよ。

http://cubiq.org/iscroll-5

もしくは、jQuery Mobileだね。
俺が試したリリース初期頃は端末が遅いのと
ライブラリが重いので使うのやめたけど。
708Name_Not_Found:2014/07/22(火) 23:33:03.36 ID:???
ってjQuery Mobile使ってるのかw
すまんすまん。
709696:2014/07/22(火) 23:50:55.84 ID:9sE25qaT
>>702
状況によっては Element.prototype.insertAdjacentHTML を使う事が解決法になるかもしれない
新しいノードを挿入する分には参照の問題はないので設計を工夫すれば何とかなる場面はあると思う
http://domparsing.spec.whatwg.org/#insertadjacenthtml%28%29
(ノード生成にしか使わない人には innerHTML ではなく、insertAdjacentHTML を推奨しておく)
710Name_Not_Found:2014/07/23(水) 00:02:58.31 ID:???
>>630
これは innerHTML の最も酷いパターンだな
$('body').html(str); には驚いた
711Name_Not_Found:2014/07/23(水) 00:34:43.12 ID:???
>>633も使わなくていい場面でinnerHTMLを使ってるので五十歩百歩
ノードを置換しなくてもいいのにinnerHTMLを使ってる時点で使い方がなってない
712Name_Not_Found:2014/07/23(水) 00:36:51.87 ID:???
innerHTML使って無いジャン
713Name_Not_Found:2014/07/23(水) 02:48:39.39 ID:???
1 delete objA;
2 new objB;

結局、innerHTMLは、古いオブジェクトを削除して、
新しいオブジェクトを作っただけかね?
714Name_Not_Found:2014/07/23(水) 07:19:36.35 ID:???
xmlHttpRequestでphpを指定した時そのphpはどこで実行されるんですか?
サーバー側かクライアント側にphpごと来るのか
715Name_Not_Found:2014/07/23(水) 07:44:57.12 ID:???
>>712
.html() は内部的に innerHTML を利用しているから innerHTML を使用しているのと同義
716Name_Not_Found:2014/07/23(水) 07:47:18.56 ID:???
717Name_Not_Found:2014/07/23(水) 07:59:42.30 ID:???
>>713
innerHTML はシリアライズも行う
また、後付で標準化されたので仕様が曖昧で実装依存な処理もそれなりにある
http://domparsing.spec.whatwg.org/#innerhtml
http://msdn.microsoft.com/en-us/library/ie/ms533897.aspx
718Name_Not_Found:2014/07/23(水) 10:33:14.23 ID:???
>>714
サーバに決まってるじゃん
phpってのはサーバで実行されてHTMLやXMLを出力するもので
サーバの外に出てくることはない
719Name_Not_Found:2014/07/23(水) 11:02:24.43 ID:???
>>692
この件ですが、コンテナdivのscrollWidthには省略される前の数値が入るので
これで判定できると分かりました
ありがとうございました
720Name_Not_Found:2014/07/23(水) 12:26:23.02 ID:???
>>717
シリアライズが何を言っているのかわからないが、
innerHTMLはDOMオブジェクトをシリアライズするのではない。

HTML要素とDOMオブジェクトの違いがわかってない人が多いんだよな。
これ理解するのに、jQueryのdata()メソッドの挙動を勉強するのがいい。

たとえばこんなHTMLがあるとする。
<span id="id" data-value="123">test</span>

これを $('#id').data('value') で参照すると123が返ってくる。
そのあと $('#id').data('value', 456) を実行し、参照したら456が返ってくる。
当たり前の動作に見えるが、ここで$('#id').attr('data-value')を参照すると、返ってくるのは123。

つまり、dataはDOMオブジェクトの値をかえるが、HTML要素は書き換えないということ。
DOMオブジェクトの状態とHTMLは全くの別もの。DOMオブジェクトをシリアライズしたものがHTMLなのではない。

HTML要素を書き換えるとDOMオブジェクトに反映されるが、DOMオブジェクトを書き換えても
HTML要素には反映されない。それがDOMオブジェクトに割り当てるイベントハンドラなど。

jQueryのattr()メソッド(DOMでいえばsetAttribute)は "HTML要素を書き換える" メソッド
on(DOMで言えばaddEventListener)はDOMオブジェクトにイベントハンドラを設定するメソッド

それぞれのメソッドで、影響をあたえるものが、HTML要素だったり、DOMオブジェクトだったりする。
innerHTMLが行うのは、HTML要素の取得と設定で、DOMオブジェクト操作用ではない。
721Name_Not_Found:2014/07/23(水) 12:36:30.54 ID:???
>>720
JQueryのdataはDOMと関係無く値を収納してるんだが?
お前が一番違い分かって無いだろ…何長々と馬鹿な事言ってるんだ
722Name_Not_Found:2014/07/23(水) 12:38:55.92 ID:???
そもそも例えに何の前提もなく$(id)を使うのは
723Name_Not_Found:2014/07/23(水) 12:40:35.15 ID:???
>>721
えらいえらい。よく気づいたね。

じゃあ、DOMの話だけでするならば、
フォームのvalueが全く同じ挙動をする。

ページが表示されてからinputの内容を入力した時、
valueプロパティ、つまりDOMオブジェクトの値は最新の値だが、
value属性はページが表示された時のまま。

DOMオブジェクトの内容と、属性は関係してそうで関係していない。
jQueryのdataはこの動作を参考にして作られていると考えれば良い。
724Name_Not_Found:2014/07/23(水) 12:41:44.18 ID:???
実装依存は困るよな…
っていうかHTMLもCSSもJavaScriptも全ブラウザ全部仕様通り全部動作完全に一緒だったらと思うと
725Name_Not_Found:2014/07/23(水) 12:43:35.34 ID:???
>>724
それはネットスケープが悪いんだよ。JavaScriptを初めて搭載したブラウザ。
標準化しないで勝手に言語を作った。

まずいきなり実装しないで、標準団体を設立して標準化するべきだった。
726Name_Not_Found:2014/07/23(水) 13:11:41.52 ID:???
>>725
今更何を…
むしろマイクロソフトに言うべきだろ
msは話しにならん