jQuery 質問スレッド vol.8
■ このスレッドは過去ログ倉庫に格納されています
JavaScriptでDOM用ライブラリであるjQueryのスレです。 次スレは>>950 が>>2 のテンプレ案(本スレで改善案があれば考慮)を元に立ててください このスレはjQueryやjQuery UIの使い方やjQueryプラグインの作り方を質問するスレです。 jQueryを使って作る側のスレであって、こんなプラグインありませんか?と聞くスレではありません。 そういうのは自分で探してください。 ろくにサポートもされてなさそうな野良プラグインの使用はおすすめしません。 JavaScriptの質問は関連スレで質問して下さい。 ■前スレ jQuery 質問スレッド vol.7 https://mevius.5ch.net/test/read.cgi/hp/1478055094/ ■関連スレ JavaScript の質問用スレッド vol.130 https://mevius.5ch.net/test/read.cgi/hp/1501503056/ ECMAScript デス 6 https://mevius.5ch.net/test/read.cgi/tech/1483332914/ JavaScript ライブラリ総合質問所 vol.5 https://echo.5ch.net/test/read.cgi/hp/1465399470/ 質問を自分仕様に変えて自慢げに書くスレ 質問者が言ってもいないことを言ったと言い張るスレ 質問者が問題としてないことを問題として扱うスレ ま、これはいいか 「こういう仕様ならこういう方法もあるよ」くらいなら > ま、これはいいか > 「こういう仕様ならこういう方法もあるよ」くらいなら 俺もそう思う 条件付き提案に「そんな条件は許さん」と食って掛かる人間が一番困る >>518 class属性の代わりにdata-*属性を使うという話をしてる その話にWeakMapが頓珍漢な答であることは明白 だから黙ってろって話 日本語読めないのかな? 142 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 11:50:24.50 ID:??? >>140 それだと静的に付けたclassまで消えちゃうじゃん 143 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 17:27:37.90 ID:??? >>142 そうなんだけど・・・の管理が面倒で 変更の度にそこも付け加えなくてはならなくて 最初つけるclassは1,2個と少ないので楽かなと ---------- $('.aaa').removeClass().addClass('aaa'); とすると、.aaaに静的に付けたその他のクラスが消えてしまうという指摘を >>142 でやっていて 質問者>>143 のレスの冒頭、 それはそうなんだけど。と認めている。 そして・・・の管理が面倒だけど、最初つけるclassは1,2個で楽かなといってる 最初つけるclassが何個でもいいし・・・の管理も楽になる手段として data-*属性を使う方法を提案している。 ここまではいいよな? data君はちゃぶ台返しをするから好きになれん 「スコープって何よ?⇒説明⇒いや、そもそもWeakMapの話なんてしてないから」 他人に説明させておいてそれはないだろ 「そもそもWeakMapの話なんてしてない」が結論ならスコープの説明を求める必要がない >>525 静的classと動的挿入classの管理が面倒だから分割したいって要件に読めるけど 「静的classと動的挿入classの管理が面倒だから分割したいって」ってどういう意味ですか? 他の人、誰か理解できる人いますか? これ自分用語で誰にも理解できない文章ですよね 静的につけたclass名と動的につけたclass名が衝突してしまう可能性があるが、名前を管理するのが面倒だから処理を分割したい、という意味だろ スコープの下りを読めば分かるだろうに >>526 > data君はちゃぶ台返しをするから好きになれん ちゃぶ台? 最初からスコープ関係ないだろって言ってんだろ ↓ほれみろや。俺は関係しないと最初から言ってる。 498 自分:Name_Not_Found[sage] 投稿日:2018/02/16(金) 23:29:53.34 ID:??? 誰かここでスコープが関係してくる理由説明できる?誰もできないと思う 500 名前:Name_Not_Found[sage] 投稿日:2018/02/16(金) 23:35:27.92 ID:??? 今の属性の話に変数のスコープは関係ないからねw 関係するというのなら説明してみろって話 そして説明を聞いて、やっぱりスコープ関係してないじゃんかという結論 最初からスコープ関係ないって話をしてる。 >>529 だからスコープ関係ないって言ってんだろうが いい加減にしろ 「何を頓珍漢な事を」ぐらいにしか思っていないぞ >>529 > 静的につけたclass名と動的につけたclass名が衝突してしまう可能性があるが、 静的に付けたclass名がaaaで、動的に付けたclass名もaaaで 衝突してしまうと言いたいんですか? では、最後の質問です。それはどこを見てそう勘違いしたんですか? 衝突ですよね。「衝突」「被る」「重複する」「同じ名前」など それに類する言葉が使われているレスを指ししめなさい 指し示すっていうのは、あんたが読んで勘違いしてしまったレスなんで 自分で書いたレス読んで自分が勘違いしたなんて アホなことはいわないようにねw というか、>>142 が問題提起したものだろ 流れ見れば、誰ても分かると思うが これですね。>>142 が問題点を指摘して 質問者の>>143 が「そうなんだけど」と納得した流れです。 142 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 11:50:24.50 ID:??? >>140 それだと静的に付けたclassまで消えちゃうじゃん 143 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 17:27:37.90 ID:??? >>142 そうなんだけど・・・の管理が面倒で 変更の度にそこも付け加えなくてはならなくて >>530 関係ないと初めから分かっているなら、スコープの質問をしなければよかったと思うよ 質問するまでもなく、分かっているんだから >>536 オマエ馬鹿なのか? スコープの質問なんかしてないが? 500 名前:Name_Not_Found[sage] 投稿日:2018/02/16(金) 23:35:27.92 ID:??? 今の属性の話に変数のスコープは関係ないからねw 関係あるというのなら、どういうふうに関係があるのか 説明してもらおうか。変数のスコープの説明じゃないぞ 変数のスコープが今回のclass属性の代わりにdata-*属性を使うと 管理しやすくなるという話にどう関わってくるのかの説明だ こうやってスコープの説明じゃないぞっていっても スコープの質問をしたと勘違いするバカが居るんだよなぁw こうやって、俺が何を言ったかをいちいち書いておかないと 話を捻じ曲げてくるからな。 ずーっと捻じ曲げようとしている。 だから何度も引用するわ このスレを「スコープ」で検索すると最初に見つかるのはこれ 497 名前:Name_Not_Found[sage] 投稿日:2018/02/16(金) 23:28:06.66 ID:??? > data君が気が付いてない問題は、スコープでしょ > 属性は公開されているわけだし、その答えに行き着くのは理解できるけどね それに対する最初のレスで、すでにスコープが関係ないことを示している 関係有ることを誰も説明できない。だって関係ないもの。 498 自分:Name_Not_Found[sage] 投稿日:2018/02/16(金) 23:29:53.34 ID:??? > 誰かここでスコープが関係してくる理由説明できる?誰もできないと思う > > 多分こいつ、自作自演してる。書いた本人だわ > 自分にしか通じないことしか言ってない >>541 俺が飽きるまで何連投でもするよw せっかくの、お・も・ち・ゃw ここは質問スレではありません data君のストレス発散スレです いいえ、質問に答えているだけです。 次から次へとくるよくわからない質問に 答えているだけです。 >>535 そうなんだけどは問題点としてではなくaaaが一旦消えること aaaにCSS(見た目)は当ててないので閲覧者に不便はない 実際ブラウザで正常に動作する(=だからいいではないが)からいいんだよ 別に問題とは思ってないし問題にはなってない >>548 動くかどうかじゃなくてメンテナンスコストの問題 > そうなんだけど・・・の管理が面倒で > 変更の度にそこも付け加えなくてはならなくて >>553 attr()メソッド使えばいいで終わり $('.aaa') .removeClass().addClass('aaa').end() .attr('class', 'aaa'); >>548 って最初の質問の時点で読み取れるよな 勝手に問題、困ってると解釈して勝手に修正しようとしてたわけだ > >>548 って最初の質問の時点で読み取れるよな その次のレスで覆ったんだよ data君は自分が優秀だと思っている こんなところにいる底辺な奴らに自分が馬鹿にされていいわけがない そうだ、明らかに馬鹿なこいつを煽ってやろう 馬鹿なこいつは自爆するからそこを追求してやればいい そうして、皆が自分を優秀な人間だと認めるだろう >>569 次のレスってどれのこと? 質問者: 140 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 10:57:06.54 ID:??? > .aaaに動的に付けたclass(bbb ccc ddd・・・)の削除や付け直しを一括でしたく > $('.aaa').removeClass('bbb ccc ddd・・・'); > を > $('.aaa').removeClass().addClass('aaa'); > とするのはあり? 質問者への問題点の指摘: 142 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 11:50:24.50 ID:??? > >>140 > それだと静的に付けたclassまで消えちゃうじゃん 質問者の次のレス:143 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 17:27:37.90 ID:??? > >>142 > そうなんだけど・・・の管理が面倒で > 変更の度にそこも付け加えなくてはならなくて > 最初つけるclassは1,2個と少ないので楽かなと 質問者の次のレスを解説すると 1. そうなんだけど => 問題点への指摘の同意 2. ・・・の管理が面倒で => 面倒な部分 3. 変更の度にそこも付け加えなくてはならなくて => ・・・の部分が変わる 4. 最初つけるclassは1,2個と少ないので楽かなと => 個数は不明だが、少ないのでまだましだということ これに対してdata-*属性を使った場合は、全ての問題が解決する classは論外だが何でもかんでもdata-に頼るべきではない <custom-postit data-form=circle のように基本的に使うものであって、 ある特定のJS内で完結する場合の要素へのデータの紐付けはWeakMapを使うべき >>570 まだ続けたいのか >>573 kwsk >>574 詳しく言うとJS内で完結するというのは主にCSSと連携しないってことだよ CSSからJS内の変数は読み書きできないから変数の値が○○の時に色を変えるとかはできない data-ならCSSと連携できるがそれが必要ないなら場合はJSでいい もともとは全部classに入れていたわけだけど、classをCSSと連携しない使い方をしてるなら data-ではなくJS側に全部持ってこれるということ 今回がどっちに当てはまるのかはしらないけどね ん?元はclass使っていたってことは、CSSと連携したいってことでは? しきりにWeakMapを連呼してるのは、オブジェクトが消えてもメモリリークが 起きないってことを言いたいのかもしれないけど、それはjQueryのdata()メソッドでもできること (質問者がdata()メソッドの存在を知らなかった可能性はあるけど) http://api.jquery.com/jQuery.data/ > The jQuery.data() method allows us to attach data of any type to DOM elements in a > way that is safe from circular references and therefore from memory leaks. > We can retrieve several distinct values for a single element one at a time, or as a set: もともとclassを使っていた以上CSSと連携させたいと思うのが普通で それをJS側に持ってこれるとは思わないな。 > ん?元はclass使っていたってことは、CSSと連携したいってことでは? ただの思い込み その理屈で言えば、WeakMapでできるというのも思い込みなわけで $(V.aaaV).attr(VclassV, VaaaV); >>579 最初はそれに気づかずに、CSSと連携できないって 指摘されて意見を変えたみたいねw 言っとくけど俺は573以降ここまでレスしてないから それに意見を変えたって、一体どういうこと? 意見は全部573に含まれてて完結している 書いたとおり、要素とデータを結びつけるときには必ずしも要素の属性を利用しなくとも WeakMapの方が勧められる『場合もある』と言っただけ そしてその理由は主にセマンティクス上のもので機能の優劣を述べたつもりもない 間隔としてはグローバル変数をむやみに使うなと同じような小言 それ以上でもそれ以下でもない 大人ならすぐ他人を煽ったり話を茶化して非建設的な流れに持っていくのは辞めろ >>576 文は長いが書いてあること全然詳しくないのだが 具体的にお願いできないかな >>583 最初から意見かえたのか? >> 438 > まだやっていたのか > 静的につけたclassが動的処理で消える問題を考慮するなら、data-*もclassも同じ問題を抱えてる > WeakMapを使えば良いだけ >>582 タグのclassを使う代わりに、JavaScriptの変数にしろっていう意見でOK? 要するにそれを使ってスタイルを当てる、とか カスタム要素で利用する属性である、とか 他のライブラリやモジュールから利用される、とか 第三者と共有する必要があるために、データをおおやけにする意味があるならいいが そうでなくJSで自分自身の閉じた空間内でメモ書きがしたいだけなら 要素の属性を使うのは下品じゃないかということだろう >>585 一番言いたいことは、そういう方法も使えるのに要素をデータを結びつけるためには 普通要素の属性を使うもんだと考え方が狭くなってないか?ということ それと一般的抽象的に考えて、オブジェクトとデータを結びつける効果的方法である WeakMapをもっとどんどん使っていこうよという意見 いや、class属性でやっていたものをWeakMap使えばいいっていうのが 必ずしも正しくないって話だろ。cssで使えないんだから なんでもかんでもWeakMapで解決するような言い方をするからいかんのだ >>587 > 一番言いたいことは、そういう方法も使えるのに要素をデータを結びつけるためには 話がずれてるよ 要素とデータを結びつけたいなんて誰も言ってない class属性のメンテナンスが面倒くさいって話をしてる >>588 自分はWMを使う方が良いケースもあると言っただけであって なんでもかんでもWMでなんて一言も言っていない >>589 それを言っちゃあそもそも論が出てきた最初の質問から5スレ後には既にずれてて 今や一般的な話になっている そのクラスだって単にjQから利用するためのラベル付なのかもしれないしね >>589 要はsourceの意図 classにしても class="*-aaa, bbb" とか部類の意図を把握できればそれで良いんだよ data-*="hoge" にしても結局は製作者の意図によるもの ま、個々の勝手だが >>584 > 最初から意見かえたのか? 何言ってるかわからん 誰か別人と勘違いしてないか? >>587 それは一理ある >>589 >class属性のメンテナンスが面倒くさい それってdata君の言い分だよな 少なくとも質問者はそう思ってない もっといい方法もあるよももっともだが質問者は断ってるしな >>590 > 自分はWMを使う方が良いケースもあると言っただけであって それをいうなら、俺だって今回のケースでは data-*属性をつかうと良いというだけで、 すべての場合でdata-*属性を使えなんて言っていない つまり、俺が今回の問題に対してレスしている所に横から割り込んできて、 今回の問題とは無関係な話を始めたお前がおかしい >>593 > それってdata君の言い分だよな 質問者が言ってるよ ↓ほらね 143 名前:Name_Not_Found[sage] 投稿日:2018/01/28(日) 17:27:37.90 ID:??? > >>142 > そうなんだけど・・・の管理が面倒で > 変更の度にそこも付け加えなくてはならなくて > 最初つけるclassは1,2個と少ないので楽かなと >>591 > classにしても class="*-aaa, bbb" とか部類の意図を把握できればそれで良いんだよ その話は>>210 で俺がすでにしてる > ま、無理やりやろうとするなら、classの値に特殊な名前つけルールを作って > そのルールを解釈して操作する関数を作るなんて "無駄なこと" をやればできるがねw > whiteとではなくcolor-whiteみたいにプリフィックス付けて全部列挙して color- だと・・・無駄だなw >>594 自分が言いたいのはその2つのどっちが優れているかではなく、 他の有効なやり方だってあるんだし、細かな意味的なことだって重要 だからそれぞれ適材適所バランス良く使おうねということ 今回のケースにしたって情報が不足してるんだからこれが最適だとかいう回答はできないから揉めている 結果一般論的にこれまでの全ての流れを踏まえて勝手なまとめ的にそういった感想を述べたまでで 君に当て付ける気なんて微塵もないし、完全に被害妄想 >>596 無理やりとかw どちらにしてもhtmlとしては個人の単なる部類に過ぎないし、文書構造からして無意味なこと あくまで主観に過ぎない >>595 横から失礼 data-*にしてremoveClass()の部分はどうすんの? 得体のしれないclass(相当)がある場合とない場合で >>599 話を再確認しようか? 今回の話はdata-*属性を使ったら楽に実装できるという話であって 今回の話にremoveClass()が必要か?という話を先に決めないといけない 答えを言うと今回の話にremoveClass()は必要ない 今回の話data-*属性を使ってclass属性をエミュレートしましょうって話じゃない。 今回の話はclass属性を無理やり使ってるのをやめて data-*属性を使えばシンプルに実装できる。という話だから まあ別にremoveClassなんて簡単な処理なんだけどねw var data = "foo foobar foo bar"; console.log(data.replace(/(^|\s)foo(\s|$)/g, ' ')); こんな感じかな $(・・・).attr('data-class', function(attr) { return attr.replace(/(^|\s)foo(\s|$)/g, ' '); }); アロー関数を使えば一行 $(・・・).attr('data-class', attr =>attr.replace(/(^|\s)foo(\s|$)/g, ' ')); これ以上減らしたければjQueryプラグインを作れば良いんじゃないかな? 一応CSSには[attr~=value]というclassっぽく解釈する属性セレクタが有るから 属性を空白区切りの語のリストとして操作するプラグインは 準標準といってもいいぐらいの価値はあると思う。 折角DOMTokenListが使えるclassListを使わずに dataset使ったと思えばDOMStringMapも利用しないで文字列パースとか 正気の沙汰とは思えんな そんなやり方のほうがよっぽど他に方法がなかったのかと言われるおかしいことだと思うがね 全くシンプルじゃない スマートフォンがスマートじゃないのと同じこと >>604 おまえは知らんかもしれんけど、classListが使えるようになったのってIE10からだぞ。 それまでjQueryを使わない場合に、普通にやっていたことなんだが ほんと正気の沙汰じゃなかったよねw ほらねw だから最初に今回はremoveClass()は不要っていう話をしようって 言ったんだが。 今回の話はdata-*属性をつかうといシンプルにできるって話をしてるのに 話が通じないのは馬鹿だからか卑怯だからか わかった。今回の話はdata-*属性を使ったほうが シンプルにできる。 で? で?と言われてもな 今回はdata-*属性を使ったほうがシンプルにできるから data-*属性を使いましょう。とかしか 何が聞きたいの? 599です >>600 >今回の話にremoveClass()が必要か?という話を先に決めないといけない ごもっとも >>602 ,603 removeClass()でいいかな、わかりやすいし data-*属性を使おうっていう話は 一つのdata-*属性に複数の値を空白区切りで 入れたりはしないのでremoveClass()は単に attr('data-name', '') でいいんだよ いっぺんに複数の値を初期化したければ attr({data-name1: '', data-name2: '', data-name3: ''}) という書き方もできる そういやremoveAttr()ってのもあったな スペース区切りで同時に複数の属性を消せるようだ そうか一個しか存在しないclass属性は一つの属性に複数入れるために スペース区切りで入れるしかないけどdata-属性は複数作れるから そんなことしなくていいいだな >>612 それだと > 変更の度にそこも付け加えなくてはならなくて と変わらないぞ >>615 え?ぜんぜん違う。 classはいろんな目的で使われるから、想定外のものだって入る可能性がある 特にデザインでclassを使うのはごく普通に行われる だから消す時に想定外のものが入っている場合どうするかという話が出てくる data-*属性だと想定外のものは入らないのでそういった問題がない 具体的にいうと <span class="target ?? aaa bbb ccc ・・・">というものから、 .targetのクラスという条件に当てはまるものから、aaa, bbb, cccのように アルファベット3文字のものだけを消そうとすると面倒 removeClass()を使って全部消すと、消してはいけないtargetや??まで消える。 だけど消したいものをdata-*属性に入れていれば <span class="target ??" data-name="aaa bbb ccc ・・・"> .targetクラスという条件に当てはまるものから、data-name属性を消すだけで targetと??に影響をあたえること無く消したいものだけを消せる >>616 逆に言うとライブラリの想定外のものが消せない >>461 > 次のスレタイ=マウント取りたくてウズウズしているスレ data君がマウント取りたくてウズウズしているスレ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる