JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【条件】期待する回答の条件を書いてください。(ex: jQuery不可, フレームワーク不可)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
+ JavaScript の質問用スレッド vol.131 +
■ このスレッドは過去ログ倉庫に格納されています
2017/11/21(火) 21:58:33.01ID:???
2018/02/09(金) 01:31:40.71ID:???
2018/02/09(金) 01:34:56.66ID:???
>>541
カルーセル作りたいなら、の意味がわからん
カルーセル作りたいなら、の意味がわからん
2018/02/09(金) 01:43:38.37ID:???
touch, mouse を透過的に扱うのは、
Electron, Cordova, React などのフレームワーク
>>533
ECMA5 では、ブロックスコープが無かったから、
関数でスコープを作る
Electron, Cordova, React などのフレームワーク
>>533
ECMA5 では、ブロックスコープが無かったから、
関数でスコープを作る
2018/02/09(金) 01:52:06.65ID:???
2018/02/09(金) 01:53:28.22ID:???
バッドノウハウの温床というやつだな
2018/02/09(金) 01:54:39.96ID:???
>>544
内部でvarしない関数定義もしない場合、スコープ作る必要ある?
内部でvarしない関数定義もしない場合、スコープ作る必要ある?
2018/02/09(金) 04:12:44.08ID:???
前提知識として学ばないといけないことが多すぎ複雑すぎなのが嫌なのに
ライブラリの構造とか使い方とか
さらにさらにバージョンごとの差異とか
そんなん使ってられませんわ
ライブラリの構造とか使い方とか
さらにさらにバージョンごとの差異とか
そんなん使ってられませんわ
2018/02/09(金) 08:46:59.23ID:???
JSの仕組み自体はシンプル・イズ・ザ・ベストなのに
2018/02/09(金) 08:59:58.13ID:???
というか、柔軟なんだよ
2018/02/09(金) 09:43:55.08ID:???
>>543
> カルーセル作りたいなら、の意味がわからん
考えることがたくさんあるからだよ
要件次第だが
カルーセルで横スクロールする時、
縦スクロールしたらページはスクロールするか?とか
ピンチ、ピンチアウト機能と両立できるか?とか
スクロールはスムーズか?とか
(スムーズにするためのCSSの機能があるが使えない機種がある)
> カルーセル作りたいなら、の意味がわからん
考えることがたくさんあるからだよ
要件次第だが
カルーセルで横スクロールする時、
縦スクロールしたらページはスクロールするか?とか
ピンチ、ピンチアウト機能と両立できるか?とか
スクロールはスムーズか?とか
(スムーズにするためのCSSの機能があるが使えない機種がある)
2018/02/09(金) 10:00:02.38ID:???
カルーセルの基礎構造って
・操作に応じて横方向に画像が切り替わりループするスライド
・スライドを操作する「<」「>」ボタンや「□■□□」のようなナビゲーションを兼ねたボタン
これだけじゃないのか
touchendが使えればtouch*、でなきゃclickやmousedown、だけで普通にpure jsで書けね
・操作に応じて横方向に画像が切り替わりループするスライド
・スライドを操作する「<」「>」ボタンや「□■□□」のようなナビゲーションを兼ねたボタン
これだけじゃないのか
touchendが使えればtouch*、でなきゃclickやmousedown、だけで普通にpure jsで書けね
2018/02/09(金) 11:08:48.56ID:???
初心者が失礼します
http://fast-uploader.com/transfer/7073696781713.jpg
このコードで28行目の関数の引数eventはクリックしたときに引き渡されると思うんですが何が引数として引き渡されているのでしょうか?
event.clientXとevent.clientYでそれぞれ左上から縦横の位置を示してるのはわかるんですが、
じゃぁ.clientXと.clientYをとったときのeventってなんなんだろうって疑問になります。
この引数はいったい何でいつどんな変数が入ってるのでしょうか?
http://fast-uploader.com/transfer/7073696781713.jpg
このコードで28行目の関数の引数eventはクリックしたときに引き渡されると思うんですが何が引数として引き渡されているのでしょうか?
event.clientXとevent.clientYでそれぞれ左上から縦横の位置を示してるのはわかるんですが、
じゃぁ.clientXと.clientYをとったときのeventってなんなんだろうって疑問になります。
この引数はいったい何でいつどんな変数が入ってるのでしょうか?
2018/02/09(金) 11:28:00.42ID:???
イベントオブジェクトの一種、マウスイベントオブジェクト
clickされたときにブラウザがイベントオブジェクト作って引数eventとして引き渡してくれる
.clientXや.clientYはマウスイベントオブジェクトが持っているプロパティ
だからevent.clientXでマウスX座標が取れる
https://developer.mozilla.org/ja/docs/Web/API/MouseEvent/clientY
clickされたときにブラウザがイベントオブジェクト作って引数eventとして引き渡してくれる
.clientXや.clientYはマウスイベントオブジェクトが持っているプロパティ
だからevent.clientXでマウスX座標が取れる
https://developer.mozilla.org/ja/docs/Web/API/MouseEvent/clientY
555515
2018/02/09(金) 11:47:48.48ID:??? >>542
pointer events って便利そうだけど
今、動作するのは chrome と edge だけってことですか?
作ってるサービスの対応ブラウザとしては、できるだけ多くを相手にしたいです。
自分が作ってる中で
押したらすぐ反応して欲しい部分は、プレイ画面中のボタンだけなんです
ある機械の状態をWebRTCでリアルタイムに流してて、ボタンはその機械を操作するものです
これスレと関係なかった
pointer events って便利そうだけど
今、動作するのは chrome と edge だけってことですか?
作ってるサービスの対応ブラウザとしては、できるだけ多くを相手にしたいです。
自分が作ってる中で
押したらすぐ反応して欲しい部分は、プレイ画面中のボタンだけなんです
ある機械の状態をWebRTCでリアルタイムに流してて、ボタンはその機械を操作するものです
これスレと関係なかった
2018/02/09(金) 11:49:18.43ID:???
557515_555
2018/02/09(金) 12:16:28.78ID:??? スレ違だろうなぁ、でも他に
知見のある人のいるスレが見つけられない m_m
もう諦めてるんですが
画面サイズから video を90度回して縦方向いっぱいに計算して表示してるのですが
スマホ画面の上とか下に出てくるじゃまなやつのせいで動画が
ちっちゃくなってしまうのは、どうにもならないですか
知見のある人のいるスレが見つけられない m_m
もう諦めてるんですが
画面サイズから video を90度回して縦方向いっぱいに計算して表示してるのですが
スマホ画面の上とか下に出てくるじゃまなやつのせいで動画が
ちっちゃくなってしまうのは、どうにもならないですか
2018/02/09(金) 13:21:50.31ID:???
何でFullScreenAPI使わないの?
559515_555
2018/02/09(金) 14:55:53.28ID:???560Name_Not_Found
2018/02/10(土) 11:50:49.98ID:oy2RaxPK 下で「START」ボタン押してもなにもおこらないんですがなぜでしょう?
エラーは出ません。
chromeです。
<div class="container operate">
<ul>
<li><button class="button" id="start" onclick="click()" >START</button></li>
</ul>
</div>
<script type="text/javascript" charset="utf-8" >
function click() {
window.alert("2");
}
</script>
エラーは出ません。
chromeです。
<div class="container operate">
<ul>
<li><button class="button" id="start" onclick="click()" >START</button></li>
</ul>
</div>
<script type="text/javascript" charset="utf-8" >
function click() {
window.alert("2");
}
</script>
2018/02/10(土) 12:17:41.99ID:???
click()の関数名がまずいっぽいね
click1()に変えたら動いたよ
click1()に変えたら動いたよ
2018/02/10(土) 12:35:50.48ID:???
そういうのもあるし、onclick属性とは
HTMLのonなんたらで処理呼び出すのやめなよ
HTMLのonなんたらで処理呼び出すのやめなよ
563Name_Not_Found
2018/02/10(土) 12:51:55.94ID:oy2RaxPK2018/02/10(土) 13:20:38.10ID:???
>>562
reactさんをバカにするのはやめるんだ
reactさんをバカにするのはやめるんだ
2018/02/10(土) 13:29:12.18ID:???
react?あれはJSXだから関係ない
2018/02/10(土) 13:47:15.21ID:???
2018/02/10(土) 13:54:02.97ID:???
2018/02/10(土) 14:15:36.43ID:???
>>567
根拠なくon*属性にハンドラ書くの否定するなという話なんだが?
根拠なくon*属性にハンドラ書くの否定するなという話なんだが?
2018/02/10(土) 15:23:07.72ID:???
reactがHTMLのon*使ってるかどうかはon*が良いか悪いかの指標にはならん
2018/02/10(土) 15:27:51.69ID:???
じゃあ>>562のやめなよの根拠は?
2018/02/10(土) 15:45:42.89ID:???
やめなよ
2018/02/10(土) 15:50:10.61ID:???
|ヽ∧_
ゝ __\ やめなよ
||´・ω・`| >
/  ̄ ̄ 、ヽ _______
└二⊃ |∪=| |─── /
ヽ⊃ー/ノ  ̄ ̄ ̄ ̄
 ̄`´ ̄
ゝ __\ やめなよ
||´・ω・`| >
/  ̄ ̄ 、ヽ _______
└二⊃ |∪=| |─── /
ヽ⊃ー/ノ  ̄ ̄ ̄ ̄
 ̄`´ ̄
573Name_Not_Found
2018/02/10(土) 20:33:03.75ID:tiFE6zoU こう言う文字列を作成して
var str ='文字列';
var func = '<button onclick="func(¥'' + str + '¥')">実行</button>';
funcをhtmlのページに埋め込みました。
そのhtmlを表示すると、文字列strが英数字なら問題ないのですが、文字列中にシングルクォーテーションとかダブルクォーテーション
が混じっているとエラーが出ます。
正しい解決方法を教えてください。
var str ='文字列';
var func = '<button onclick="func(¥'' + str + '¥')">実行</button>';
funcをhtmlのページに埋め込みました。
そのhtmlを表示すると、文字列strが英数字なら問題ないのですが、文字列中にシングルクォーテーションとかダブルクォーテーション
が混じっているとエラーが出ます。
正しい解決方法を教えてください。
2018/02/10(土) 21:22:04.38ID:???
埋め込みました、て・・・document.writeしたりelement.innerHTMLに入れたりしてんだろ
なんでcreateElementしてaddEventListenerしてappendChildしないんですか
なんでcreateElementしてaddEventListenerしてappendChildしないんですか
2018/02/10(土) 21:33:18.02ID:???
そういう問題ではない
2018/02/10(土) 21:45:41.78ID:???
シングルクォーテーションの数が奇数です
577Name_Not_Found
2018/02/10(土) 22:49:57.63ID:tiFE6zoU >>574
やり方が分からないからです。
やり方が分からないからです。
2018/02/10(土) 23:12:46.00ID:???
2018/02/10(土) 23:19:52.42ID:???
2018/02/10(土) 23:31:51.47ID:???
やっぱたぶんサーバーサイドテンプレートなんだろうな。
質問するのになんで隠すのか分からんが。
ほらよ>>573
出力確認のためのconsole.logもつけたから良く確認するように。
var str = 'こんにちは\'赤"ちゃん'; // 念のため言っとくがこの場合ここシングルクォートにエスケープ必要
console.log(str); // こんにちは'赤"ちゃん
str = str.replace(/'/g, "\\'"); // ブラウザJSのコンテキストでシングルクォートエスケープ処理
console.log(str); // こんにちは\'赤"ちゃん
str = str.replace(/"/g, '"'); // HTMLのコンテキストでダブルクォートエスケープ処理(文字参照に変換)
console.log(str); // こんにちは\'赤"ちゃん
var func = '<button onclick="alert(\'' + str + '\')">実行</button>';
console.log(func); // <button onclick="alert('こんにちは\'赤"ちゃん')">実行</button>
質問するのになんで隠すのか分からんが。
ほらよ>>573
出力確認のためのconsole.logもつけたから良く確認するように。
var str = 'こんにちは\'赤"ちゃん'; // 念のため言っとくがこの場合ここシングルクォートにエスケープ必要
console.log(str); // こんにちは'赤"ちゃん
str = str.replace(/'/g, "\\'"); // ブラウザJSのコンテキストでシングルクォートエスケープ処理
console.log(str); // こんにちは\'赤"ちゃん
str = str.replace(/"/g, '"'); // HTMLのコンテキストでダブルクォートエスケープ処理(文字参照に変換)
console.log(str); // こんにちは\'赤"ちゃん
var func = '<button onclick="alert(\'' + str + '\')">実行</button>';
console.log(func); // <button onclick="alert('こんにちは\'赤"ちゃん')">実行</button>
2018/02/10(土) 23:34:28.83ID:???
あ、すまん確認のためfuncをalertに変えてたんだった。alertはfuncに置換してくれ
2018/02/11(日) 00:43:04.96ID:???
babelって今は末尾再帰最適化をサポートしてくれないんですか?
せっかく気軽に再帰で開発できると思ったのに……
せっかく気軽に再帰で開発できると思ったのに……
2018/02/11(日) 01:03:27.06ID:???
SSIだとなんか問題起きるんか(ハナホジ
2018/02/11(日) 01:36:10.68ID:???
>>582
プラグインになっただけじゃねーの?
https://www.npmjs.com/package/babel-preset-optimized
This is a list of plugins this uses. Do note that by default, not all of these may run:
babel-plugin-minify-constant-folding
babel-plugin-loop-optimizer
babel-plugin-closure-elimination
babel-plugin-tailcall-optimization
プラグインになっただけじゃねーの?
https://www.npmjs.com/package/babel-preset-optimized
This is a list of plugins this uses. Do note that by default, not all of these may run:
babel-plugin-minify-constant-folding
babel-plugin-loop-optimizer
babel-plugin-closure-elimination
babel-plugin-tailcall-optimization
2018/02/11(日) 02:21:31.20ID:???
https://w3techs.com/technologies/overview/javascript_library/all
w3techsによると2017年1月の時点で71.9%のサイトが
JavaScriptのライブラリとしてjQueryを使用していることが判明したが
それから1年たった2018年1月現在、73.2%に1.4%も増えていることが判明した。
またAngularは0.5%、だがReactが伸びてきており0.5%
とAngularを逆転したことがわかる
だがjQueryには大幅なさをつけられており取って代わるのは
いつになるのか動向が注目される
w3techsによると2017年1月の時点で71.9%のサイトが
JavaScriptのライブラリとしてjQueryを使用していることが判明したが
それから1年たった2018年1月現在、73.2%に1.4%も増えていることが判明した。
またAngularは0.5%、だがReactが伸びてきており0.5%
とAngularを逆転したことがわかる
だがjQueryには大幅なさをつけられており取って代わるのは
いつになるのか動向が注目される
2018/02/11(日) 02:46:01.53ID:???
軽く使えるDOM操作ライブラリってほとんどないから
2018/02/11(日) 02:51:23.00ID:???
jqueryに大幅な差というよりangularやreactが木っ端なだけだろ
2018/02/11(日) 03:18:40.93ID:???
自前でwebサービス立ち上げてる会社以外reactもangularも出番ないんですもの。
2018/02/11(日) 03:57:28.37ID:???
自社でがっつりやるなら自社で組む手があるからなぁ
他所のポリシーに合わせる必要なくなる
他所のポリシーに合わせる必要なくなる
2018/02/11(日) 08:39:54.82ID:???
>>573
jQuery を使え
<button id="btn1">押して</button>
$('#btn1').click (function() {
// ここに処理を書く
console.log("クリックされた");
});
jQuery を使え
<button id="btn1">押して</button>
$('#btn1').click (function() {
// ここに処理を書く
console.log("クリックされた");
});
2018/02/11(日) 11:48:00.24ID:???
2018/02/11(日) 11:49:51.13ID:???
> 使われ方が全く違うだろ
ちゃんとした考え方できる人はそうわかるんだけどね。
今のところjQueryがなくなることはない。
jQueryの代替技術はない
だけど一部のjserどもが、jQueryはオワコン
これからはAngular、Reactやで!
jQuery使わなくて頑張ればコストがかかるだけでできる!
などと言い始めたからね。
ちゃんとした考え方できる人はそうわかるんだけどね。
今のところjQueryがなくなることはない。
jQueryの代替技術はない
だけど一部のjserどもが、jQueryはオワコン
これからはAngular、Reactやで!
jQuery使わなくて頑張ればコストがかかるだけでできる!
などと言い始めたからね。
2018/02/11(日) 11:50:35.97ID:???
jQueryがまだ下り坂になってないのは
この一年でシェアが更に増えたことからも明らかだよな
この一年でシェアが更に増えたことからも明らかだよな
2018/02/11(日) 11:58:03.08ID:???
>>592
addEventListenerとattachEventの違いの吸収のように
UA間で異なる仕様が少なくなっていくにつれて
jquery自体が不要になっていくんじゃないの
例えばアニメーションだって5年前とは比較にならんほどcss対応進んだし
addEventListenerとattachEventの違いの吸収のように
UA間で異なる仕様が少なくなっていくにつれて
jquery自体が不要になっていくんじゃないの
例えばアニメーションだって5年前とは比較にならんほどcss対応進んだし
2018/02/11(日) 11:59:05.35ID:???
どっちかっていうとこれからはピュアなjavascript
2018/02/11(日) 12:10:26.49ID:???
>>594
addEventListenerとonの違いを考えれば
jQuery優位になるんだよ。
今はaddEventListenerが優位な点も残っているが解決できる
でも逆にaddEventListenerはonの優位な点を解決することができない
onが優位な点
・onの方が文字数が少ない
・複数のイベントに対して一度にイベントを設定できる
・後から追加される要素に対しても働くイベントハンドラが簡単に書ける
addEventListenerが優位な点
・イベントハンドラの設定が速い(だが体感できるものではない)
・キャプチャフェーズにも対応できる(そもそもIE8非対応の機能。jQuery 4.0で対応予定)
https://github.com/jquery/jquery/wiki/jQuery-4.0-Event-Design
結局jQueryオブジェクト=DOM要素のコレクションという仕組みが最強なんだわ
jQueryオブジェクトはjQuery独自のものだから標準にとらわれず自由にメソッドを追加できる
addEventListenerとonの違いを考えれば
jQuery優位になるんだよ。
今はaddEventListenerが優位な点も残っているが解決できる
でも逆にaddEventListenerはonの優位な点を解決することができない
onが優位な点
・onの方が文字数が少ない
・複数のイベントに対して一度にイベントを設定できる
・後から追加される要素に対しても働くイベントハンドラが簡単に書ける
addEventListenerが優位な点
・イベントハンドラの設定が速い(だが体感できるものではない)
・キャプチャフェーズにも対応できる(そもそもIE8非対応の機能。jQuery 4.0で対応予定)
https://github.com/jquery/jquery/wiki/jQuery-4.0-Event-Design
結局jQueryオブジェクト=DOM要素のコレクションという仕組みが最強なんだわ
jQueryオブジェクトはjQuery独自のものだから標準にとらわれず自由にメソッドを追加できる
2018/02/11(日) 12:12:46.62ID:???
>>595
> どっちかっていうとこれからはピュアなjavascript
ピュアなjavascriptがループとか条件分岐なしに
書けるようになればね・・・
結局、言語の設計方針レベルの問題だから
ループなしにセレクタに一致する要素群に対して
一括でイベントハンドラを設定できるようにはならんと思うよ
> どっちかっていうとこれからはピュアなjavascript
ピュアなjavascriptがループとか条件分岐なしに
書けるようになればね・・・
結局、言語の設計方針レベルの問題だから
ループなしにセレクタに一致する要素群に対して
一括でイベントハンドラを設定できるようにはならんと思うよ
2018/02/11(日) 12:24:44.98ID:???
>後から追加される要素に対しても
よくわからないんだが
適切にHTML構造作ってバブリング考えてリスナ組み立てればいいだけでないの
よくわからないんだが
適切にHTML構造作ってバブリング考えてリスナ組み立てればいいだけでないの
2018/02/11(日) 12:42:53.72ID:???
>>598
jQueryだと
$('.class').on('click', function() { this はクリックされた要素 } );
これを
$(document).on('click', '.class', function() { this はクリックされた要素 } );
こう書き換えるだけでいい。
イベントハンドラの中身も書き換えなくて済む
これとまったく同じことをjQueryを使わずに書こうとしたら
ほんとうに大変だよ
jQueryだと
$('.class').on('click', function() { this はクリックされた要素 } );
これを
$(document).on('click', '.class', function() { this はクリックされた要素 } );
こう書き換えるだけでいい。
イベントハンドラの中身も書き換えなくて済む
これとまったく同じことをjQueryを使わずに書こうとしたら
ほんとうに大変だよ
2018/02/11(日) 13:00:41.21ID:???
class名でイベントリスナ貼り付けるの好きだよねjquery使い
2018/02/11(日) 13:02:25.85ID:???
>>600
IDでイベントハンドラを付ける意味が無いからね。
IDでイベントハンドラを付ける意味が無いからね。
2018/02/11(日) 13:07:07.65ID:???
jQueryは動的ページと相性が良くて動的ページっていうのはある要素が条件によって
存在したりしなかったりするわけだけど、jQueryを使うといちいち要素が
存在しているかしていないかをチェックする必要がない
その動きはCSSと一緒。
CSSでも特定の要素が存在しなくてもエラーにならない
そして要素が1つであっても複数であっても、それを気にする必要がない。
まったく同じコードで処理できる。
同じことをDOM APIだけでやろうとするとループが必要になってしまう。
そのループを避けるため、ID指定で一つの要素だけ取得しようとするが
そもそもループが存在しないjQueryではID指定に拘る必要がない。
存在したりしなかったりするわけだけど、jQueryを使うといちいち要素が
存在しているかしていないかをチェックする必要がない
その動きはCSSと一緒。
CSSでも特定の要素が存在しなくてもエラーにならない
そして要素が1つであっても複数であっても、それを気にする必要がない。
まったく同じコードで処理できる。
同じことをDOM APIだけでやろうとするとループが必要になってしまう。
そのループを避けるため、ID指定で一つの要素だけ取得しようとするが
そもそもループが存在しないjQueryではID指定に拘る必要がない。
2018/02/11(日) 14:34:55.91ID:???
>これとまったく同じことをjQueryを使わずに書こうとしたら
>ほんとうに大変だよ
後から追加した要素のイベントを検出するのは、
JavaScriptで同じ事をやろうと思えば出来るんですか?
jQueryではどんな手法でやっているんですか?
>ほんとうに大変だよ
後から追加した要素のイベントを検出するのは、
JavaScriptで同じ事をやろうと思えば出来るんですか?
jQueryではどんな手法でやっているんですか?
2018/02/11(日) 14:36:00.82ID:???
そもそもそんなハッキーな状況に軽やかに対応しないといけないって言うのが理想的ではないんじゃないか
やっぱり中に何があるかわからんけど、取り敢えず外から操る、それを楽にしたいでは無くて
コンポーネント化に努める方向で気にしなくていい事を増やした方が良いだろう
グローバル変数は楽し小さなケースでは良いけど、やっぱり色々考えると推奨されないのと同じ
やっぱり中に何があるかわからんけど、取り敢えず外から操る、それを楽にしたいでは無くて
コンポーネント化に努める方向で気にしなくていい事を増やした方が良いだろう
グローバル変数は楽し小さなケースでは良いけど、やっぱり色々考えると推奨されないのと同じ
2018/02/11(日) 14:43:37.25ID:???
>>603
まずイベントバブルを利用してdocumentにイベントハンドラを設定する
その後、発生したイベントの発生元が、指定したセレクタに一致するか比較する
そうすればできる。
最近のブラウザなら、指定したセレクタに一致するか比較するのは簡単に
できるようになっているらしいが、jQueryはそれができない時代から
独自で実装していた
まずイベントバブルを利用してdocumentにイベントハンドラを設定する
その後、発生したイベントの発生元が、指定したセレクタに一致するか比較する
そうすればできる。
最近のブラウザなら、指定したセレクタに一致するか比較するのは簡単に
できるようになっているらしいが、jQueryはそれができない時代から
独自で実装していた
2018/02/11(日) 14:44:18.43ID:???
>>604
> そもそもそんなハッキーな状況に軽やかに対応しないといけないって言うのが理想的ではないんじゃないか
JavaScriptを使ったページで、要素が動的に増えたり減ったりするのは
よくあると思うけど?
> そもそもそんなハッキーな状況に軽やかに対応しないといけないって言うのが理想的ではないんじゃないか
JavaScriptを使ったページで、要素が動的に増えたり減ったりするのは
よくあると思うけど?
2018/02/11(日) 14:48:04.46ID:???
>>604
> コンポーネント化に努める方向で気にしなくていい事を増やした方が良いだろう
そうそれ! jQueryが得意な所
IDを使ってしまうとコンポーネント化とは逆の方向になってしまう。
コンポーネントというのは使いまわしできるもので、
同じコンポーネントが一つのページに複数存在したりするものだからね。
それがjQueryと相性がいい。
同じコンポーネントというのは同じクラスであるということ
クラスに対してイベントハンドラを設定することで
コンポーネントに対しての処理が書きやすくなる。
> グローバル変数は楽し小さなケースでは良いけど、やっぱり色々考えると推奨されないのと同じ
即時関数を使ってグローバル変数を無くすってのはよくあるけど、
jQueryを使うと即時関数を使わなくてもグローバル変数はなくなってしまう。
実際に書いてみればわかるがこんな感じになるから
$(".class").on('click', function() {
// ここはローカル変数
});
> コンポーネント化に努める方向で気にしなくていい事を増やした方が良いだろう
そうそれ! jQueryが得意な所
IDを使ってしまうとコンポーネント化とは逆の方向になってしまう。
コンポーネントというのは使いまわしできるもので、
同じコンポーネントが一つのページに複数存在したりするものだからね。
それがjQueryと相性がいい。
同じコンポーネントというのは同じクラスであるということ
クラスに対してイベントハンドラを設定することで
コンポーネントに対しての処理が書きやすくなる。
> グローバル変数は楽し小さなケースでは良いけど、やっぱり色々考えると推奨されないのと同じ
即時関数を使ってグローバル変数を無くすってのはよくあるけど、
jQueryを使うと即時関数を使わなくてもグローバル変数はなくなってしまう。
実際に書いてみればわかるがこんな感じになるから
$(".class").on('click', function() {
// ここはローカル変数
});
2018/02/11(日) 15:06:24.05ID:???
結局、ここ数年のWeb界隈を見るに、既存のDOM構造の地位を脅かすようなモデルが現れてないからね
それらと相性がいいjQueryは、好みはともかく、現実的にはまだしばらくは覇権でしょう
それらと相性がいいjQueryは、好みはともかく、現実的にはまだしばらくは覇権でしょう
2018/02/11(日) 15:15:05.35ID:???
jQueryは設計センスが良すぎてとても真似できない
これとlodashであと10年戦う
これとlodashであと10年戦う
2018/02/11(日) 15:19:30.26ID:???
懐かしいな。もう一年前になるのか。
jQueryはオワコン、下降傾向にあるって言ってたやつ
一年経って減るどころか1.4%も増えたで?
その増えた量はReactよりも多い
どんな気分?w
jQueryはオワコン、下降傾向にあるって言ってたやつ
一年経って減るどころか1.4%も増えたで?
その増えた量はReactよりも多い
どんな気分?w
2018/02/11(日) 15:39:18.08ID:???
angularやreactとかは大規模複数人開発案件でないとメリットがデメリットを上回らないからjQueryはなくならないと思う。
jQueryにマウント取ってるreactファンボーイが頭おかしいだけ。
しかも攻撃理由がreact等のvirtualDOMとjQueryの生DOM操作は相性悪い→jQueryはオワコン だからな。最高に頭悪い。
飛行機ができたから電車オワコンと言ってるようなもの。
原爆できたから軍隊にナイフ要らないと言ってるようなもの。
jQueryにマウント取ってるreactファンボーイが頭おかしいだけ。
しかも攻撃理由がreact等のvirtualDOMとjQueryの生DOM操作は相性悪い→jQueryはオワコン だからな。最高に頭悪い。
飛行機ができたから電車オワコンと言ってるようなもの。
原爆できたから軍隊にナイフ要らないと言ってるようなもの。
2018/02/11(日) 16:49:33.71ID:???
2018/02/11(日) 16:52:19.03ID:???
>イベントバブルを利用してdocumentに
とりあえずグローバル変数、とりあえずsingletonみたいな感じで気持ち悪い
最低限にまとめろよ
とりあえずグローバル変数、とりあえずsingletonみたいな感じで気持ち悪い
最低限にまとめろよ
2018/02/11(日) 18:01:41.90ID:???
jQueryの是非は置いておいても
angularもreactもJSXもダメすぎる、あんなものが覇権取れるわけない
angularもreactもJSXもダメすぎる、あんなものが覇権取れるわけない
2018/02/11(日) 18:32:29.27ID:???
>>612
直近の親要素にaddEventListenerするだけだと、クリックされた要素をうまく取得できない
下記のHTMLで動的に増えるものがliだとして、そのliの中に更にspanなどが入っている場合
[click here]の部分をクリックすると期待するliが取得できない
<ul id="ul">
<li>list1 <span>[click here]</span></li>
<li>list2 <span>[click here]</span></li>
<li>list3 <span>[click here]</span></li>
</ul>
document.getElementById('ul').addEventListener('click', function(event) {
console.log(this); // ul
console.log(event.srcElement); // span
console.log(event.target); // span
console.log(event.currentTarget); // ul
})
jQueryだと大丈夫。実際にイベントハンドラを付けたulも
イベントハンドラで取得したいliも
実際にクリックされたspanも簡単に取得できる
$('#ul').on('click', 'li', function(event) {
console.log(this); // li
console.log(event.target); // span
console.log(event.currentTarget); // li
console.log(event.delegateTarget); // ul
})
直近の親要素にaddEventListenerするだけだと、クリックされた要素をうまく取得できない
下記のHTMLで動的に増えるものがliだとして、そのliの中に更にspanなどが入っている場合
[click here]の部分をクリックすると期待するliが取得できない
<ul id="ul">
<li>list1 <span>[click here]</span></li>
<li>list2 <span>[click here]</span></li>
<li>list3 <span>[click here]</span></li>
</ul>
document.getElementById('ul').addEventListener('click', function(event) {
console.log(this); // ul
console.log(event.srcElement); // span
console.log(event.target); // span
console.log(event.currentTarget); // ul
})
jQueryだと大丈夫。実際にイベントハンドラを付けたulも
イベントハンドラで取得したいliも
実際にクリックされたspanも簡単に取得できる
$('#ul').on('click', 'li', function(event) {
console.log(this); // li
console.log(event.target); // span
console.log(event.currentTarget); // li
console.log(event.delegateTarget); // ul
})
2018/02/11(日) 18:39:00.92ID:???
>>612
> classをjsの判断に使ったらcssで他の箇所に容易に再利用できなくなる
なんで? 再利用させたいならばjQueryプラグインになるだろうけど
jQueryプラグインは特定のクラスに結びつくものじゃない
> classをjsの判断に使ったらcssで他の箇所に容易に再利用できなくなる
なんで? 再利用させたいならばjQueryプラグインになるだろうけど
jQueryプラグインは特定のクラスに結びつくものじゃない
2018/02/11(日) 18:47:24.99ID:???
>>605
詳しい説明ありがとうございました。
詳しい説明ありがとうございました。
2018/02/11(日) 19:12:11.35ID:???
2018/02/11(日) 19:34:32.90ID:???
spanじゃなくて、divの中にspanだったら
こんどはparentNodeのparentNodeを取ってくればいいだけ。
またその他の要素が入っていたら、頑張ってJavaScriptを
メンテナンスすればやれないことはない
気合と金と時間さえあれば歩いて九州から北海道だって行ける!
こんどはparentNodeのparentNodeを取ってくればいいだけ。
またその他の要素が入っていたら、頑張ってJavaScriptを
メンテナンスすればやれないことはない
気合と金と時間さえあれば歩いて九州から北海道だって行ける!
2018/02/11(日) 19:35:14.22ID:???
2018/02/11(日) 19:36:00.78ID:???
やっぱりjQueryのdelegate相当のことをやろうとしたら
素のDOM APIでは大変そうですね
素のDOM APIでは大変そうですね
2018/02/11(日) 19:36:44.02ID:???
やっぱりjQuery良く出来てるわー
一年経って減るどころか増えてるからぐうの音もでないだろうね
一年経って減るどころか増えてるからぐうの音もでないだろうね
2018/02/11(日) 19:37:35.56ID:???
html構造 javascriptも使うしCSSも使う
class名 一般的にはCSSが使う
html構造変わったらjavascriptコードも変わるのが当たり前
class変わってもjavascriptコードが変わることはあまりない
javascriptでclassをトグル切り替えするとかその程度
class名 一般的にはCSSが使う
html構造変わったらjavascriptコードも変わるのが当たり前
class変わってもjavascriptコードが変わることはあまりない
javascriptでclassをトグル切り替えするとかその程度
2018/02/11(日) 19:41:05.71ID:???
>>620
1個ifが追加で入れば「簡単じゃない」「難しい」になるのかい?
逆に、デザイナがCSSいじるとき
javascriptが利用しているclass名に拘束される面倒さは「簡単じゃない」に繋がらないのかい
そういう話をしているんだけど再利用ならjQueryプラグインが云々で何を言いたいのかさっぱり
1個ifが追加で入れば「簡単じゃない」「難しい」になるのかい?
逆に、デザイナがCSSいじるとき
javascriptが利用しているclass名に拘束される面倒さは「簡単じゃない」に繋がらないのかい
そういう話をしているんだけど再利用ならjQueryプラグインが云々で何を言いたいのかさっぱり
2018/02/11(日) 19:41:30.90ID:???
> html構造変わったらjavascriptコードも変わるのが当たり前
そう、それがDOM APIの常識だった。
だけど、jQueryはそれを打ち破った。
なにせCSSと同じくセレクタを使って要素を絞り込むわけだから、
CSSと同じ効果が得られた
そして同じセレクタに同じデザインを適用するCSSと
同じセレクタに同じ振る舞いを持たせるjQueryという関係が出来上がった
考えてみれば、セレクタ=コンポーネント、
同じコンポーネントが同じデザインとう振る舞いを持つのは当然ではないか
そして混沌としてHTMLとJavaScriptの世界に
汎用性がもたらされた
そう、それがDOM APIの常識だった。
だけど、jQueryはそれを打ち破った。
なにせCSSと同じくセレクタを使って要素を絞り込むわけだから、
CSSと同じ効果が得られた
そして同じセレクタに同じデザインを適用するCSSと
同じセレクタに同じ振る舞いを持たせるjQueryという関係が出来上がった
考えてみれば、セレクタ=コンポーネント、
同じコンポーネントが同じデザインとう振る舞いを持つのは当然ではないか
そして混沌としてHTMLとJavaScriptの世界に
汎用性がもたらされた
2018/02/11(日) 19:43:30.58ID:???
生DOMはいい加減自分を操作するために親を経由するとかそういうのやめてほしい
やるとしても適当に関数作って内部でやっとけばいいのに
やるとしても適当に関数作って内部でやっとけばいいのに
2018/02/11(日) 19:43:59.66ID:???
>>624
> 1個ifが追加で入れば「簡単じゃない」「難しい」になるのかい?
そうだよ。知らなかった?
複雑度っていうのは条件分岐一つで大きく膨れ上がる。
ifが1つ増えれば2倍、2つ組み合わさればなれば、2倍の2倍で4倍。
3つだと8倍。一つ増えるだけででテストしなければいけない場合は
指数関数的に増加する
if一つだから簡単だと思っているやつは
考えが浅いというわけさ
> 1個ifが追加で入れば「簡単じゃない」「難しい」になるのかい?
そうだよ。知らなかった?
複雑度っていうのは条件分岐一つで大きく膨れ上がる。
ifが1つ増えれば2倍、2つ組み合わさればなれば、2倍の2倍で4倍。
3つだと8倍。一つ増えるだけででテストしなければいけない場合は
指数関数的に増加する
if一つだから簡単だと思っているやつは
考えが浅いというわけさ
2018/02/11(日) 19:45:04.61ID:???
2018/02/11(日) 19:48:13.86ID:???
2018/02/11(日) 19:49:27.45ID:???
2018/02/11(日) 19:49:37.98ID:???
Webデザイナと連携したことないけど何かいろいろ闇があるんですか?
2018/02/11(日) 19:50:03.87ID:???
切り分けたい時もあるし切り分けたくない時もある
切り分けられないを強要するライブラリということだ
切り分けられないを強要するライブラリということだ
2018/02/11(日) 19:50:10.81ID:???
あるわい!
違うものであってもデザインが同じなら
クラス名も同じにするんだい!
デザインが赤なら、クラス名もredにするだろ!
違うものであってもデザインが同じなら
クラス名も同じにするんだい!
デザインが赤なら、クラス名もredにするだろ!
2018/02/11(日) 19:50:42.82ID:???
デザインが同じでも、本質的に別物なら
それは違うクラス名を与えるべきだよ
それは違うクラス名を与えるべきだよ
2018/02/11(日) 19:51:48.94ID:???
CSSに他classのスタイルを継承する文法があれば筋が通るんだけどね
2018/02/11(日) 19:52:51.35ID:???
デザインが同じなら同じクラス名にしたいっていうのは
このボタンの色は青でフォントサイズ2emですね。
こちらの見出しも青でフォントサイズも2emですね。
ならボタンと見出しでデザイン一緒ですから
同じクラス名にしましょうって考える人?
このボタンの色は青でフォントサイズ2emですね。
こちらの見出しも青でフォントサイズも2emですね。
ならボタンと見出しでデザイン一緒ですから
同じクラス名にしましょうって考える人?
2018/02/11(日) 19:54:32.31ID:???
JavaScriptを使う人はHTMLとCSSのことも理解していなければ
だめだってわかる典型的な例だな
なぜかJavaScript使う人でHTMLやCSSが苦手な人が多い
だめだってわかる典型的な例だな
なぜかJavaScript使う人でHTMLやCSSが苦手な人が多い
2018/02/11(日) 19:54:58.82ID:???
>>613
なお実行順序の管理
なお実行順序の管理
2018/02/11(日) 20:05:18.62ID:???
違うものに同じスタイルを適用したいからって
クラス名を同じにするとか愚の骨頂
素人同然だわ
クラス名を同じにするとか愚の骨頂
素人同然だわ
2018/02/11(日) 20:07:44.45ID:???
HTML仕様的にはclassはスタイルの為のものであってJavascriptの為のものではないはずだが
idはscriptから参照するためという目的が明示されてるが
併記されているclassにはそれがない
同じclassが同じ振る舞いであるべきかどうかは定かではないと言っておきたい
idはscriptから参照するためという目的が明示されてるが
併記されているclassにはそれがない
同じclassが同じ振る舞いであるべきかどうかは定かではないと言っておきたい
2018/02/11(日) 20:08:40.11ID:???
> HTML仕様的にはclassはスタイルの為のものであってJavascriptの為のものではないはずだが
思い込みな。何処かに書いているというのなら言ってみてくれ
ちなみに、idはスタイルのためのものかい?w
思い込みな。何処かに書いているというのなら言ってみてくれ
ちなみに、idはスタイルのためのものかい?w
■ このスレッドは過去ログ倉庫に格納されています