元スレjQuery 質問スレッド vol.8
JavaScript覧 / PC版 /みんなの評価 :
801 = :
>>799
> は、難解すぎて、訳がわからない
縦横量対応 + jQueryプラグイン化してあるからねw
短いのであれば、こっちにあった(少しだけ変更してみた)
コードの説明はリンク先へ
http://toro.2ch. sc/test/read.cgi/hp/1452081417/732
$('td').attr('colspan', function() {
return $(this).text() === $(this).prev().text() ? null : 1;
}).filter('[colspan]').attr('colspan', function() {
return $(this).nextUntil('[colspan]').length + 1;
}).end().remove(':not([colspan])');
802 = :
そういや >>789は更に最初からcolspanがある場合にも対応していたはず
803 = :
色々と参考コードをありがとうございます
799さんのコードは理解が難しかったですが、改造案件ではこういうのをワンサカ見るんだろうなと思うので理解できるよう努力したいと思います
804 = :
何度も同じjQueryオブジェクトを使う時には
今でも一旦変数に代入した方がいいのでしょうか?
$document = $(document)
のように。
パフォーマンスから言えば代入した方がいいはずですが、
もう気にしなくていいような気もします
805 = :
気がするとは?
806 = :
マシンが高性能になっているので
マイクロ秒レベルのパフォーマンスの違いなんて気する時代ではないのでは?
という意味です
807 = :
というか1マイクロ秒の違いすらあるのか怪しいですよね・・
808 = :
documentならいいだろうが複雑でパフォーマンス考慮のないCSSセレクタ書くとマイクロ秒オーダーじゃ済まないよ
809 = :
確かに引数に文字列を渡す場合はパース処理が入るので何度も実行したくはないですね
引数がDOMオブジェクトの場合は許容範囲の感じがします
場合によりけりということでしょうか
ありがとうございました
810 = :
みんなjqueryオブジェクトには$付き変数つかってる?
それとも気にしない派? おれは気にしない派
811 = :
使ってる。
生のelementも使うから。
812 = :
>>808
> documentならいいだろうが複雑でパフォーマンス考慮のないCSSセレクタ書くとマイクロ秒オーダーじゃ済まないよ
具体例あげられますか?
813 = :
そこそこの規模のDOMを用意し、CSSセレクタでパフォーマンスの観点から避けるべきと言われていること(ユニバーサルセレクタとか子孫セレクタとか一般兄弟セレクタとか)をあえてすべて踏む長めのセレクタをぶっこんでトライ!
まさか計測まで人にやらせるつもりじゃねーだろうな
814 = :
>>813
計測はこっちでやってやるよ
お前は黙ってセレクタを書け
815 = :
>>814
じゃ黙ってDOM用意しな。セレクタはDOM依存だからな。
816 = :
セレクタの遅さはDOM依存じゃないが?
そんなにDOM用意しろって言うなら
ほらよ。遅いセレクタ書いてみなw
<span>a</span>
817 = :
DOM依存であることを示してるように見えるのだが…
818 = :
>>817
オレなら >>816 のaを選択するのにたっぷり0.1秒はかかるセレクタを書くことができるッ!
しかもそいつはつい先日納品したプロジェクトで使用したばかりのやつだッ!
819 = :
見たい見たーい!
820 :
>>804
2回以上使う場合で、その間、変化が無いなら、変数に入れて使うべき
変数に入れずに、2回書いたら、その間にDOM に、
何か変化があるのかも、と思ってしまう
変化が無いなら、変数に入れた方が、わかりやすい
821 = :
$(event.currentTarget)
とかもわざわざ変数に入れるんですか?
823 = :
>>821
アホなの?
824 = :
>>823
何故そう思ったんですか?
825 = :
>>821
入れてもいいってだけで基本的に変数に入れない。実行速度に問題があって
変数に入れると速度の問題が解決するって場合だけ入れる。
> $(event.currentTarget)
> とかもわざわざ変数に入れるんですか?
入れない
$(this)もそうだが、カッコの中がDOM要素の場合は、セレクタよりも遥かに
速度が早いので変数に入れても問題が有る速度を解決することにはつながらないだろう
それから変数に入れる前にチェインでつなぐことを考えたほうがよい。
チェインするのは変数に入れるのと同じ効果がある
またそもそもチェインすらいらないかもしれない
例えばこういう書き方もできる
http://api.jquery.com/jQuery/#entry-examples-1
$( "<div/>", {
"class": "test",
text: "Click me!",
click: function() {
$( this ).toggleClass( "test" );
}
})
http://api.jquery.com/css/#css-properties
.css({ "background-color": "#ffe", "border-left": "5px solid #ccc" })
http://api.jquery.com/attr/#attr-attributes
$( "#greatphoto" ).attr({alt: "Beijing Brush Seller", title: "photo by Kelly Clark"});
826 = :
この使い方も重要
http://api.jquery.com/attr/#attr-attributeName-function
$( "#greatphoto" ).attr( "title", function( i, val ) {
return val + " - photo by Kelly Clark";
});
1. title属性を取得して
2. title属性を加工して
3. title属性を再設定する
ということを変数無しでできる
引数に関数を渡すことで、変数に一旦入れる必要がなくなる。
↓つまりこんなコードを書かなくて良くなるということ
var $greatphoto = $("#greatphoto");
var title = $greatphoto.attr("title");
title = title + " - photo by Kelly Clark";
$greatphoto.attr("title", title);
827 = :
>>825-826
ありがとうございます
知らない方法ばかりです
関数を渡してフィルタみたいな処理ができるのは良さげです
変数をなるべく使いたくないっていうのは、
関数型っぽく書きたいっていうところから来てるんですよね
828 = :
>>827
名前を使いたくない ってのが一番大きい理由だと思うよ
おれ自身はチョイ関数でもバンバン定義する派だけど、使いたくない理由もわかる
829 = :
>>820
804ではないが参考になった
以前速度差ないとのことで変数に入れずにいたが
そういうことならわかりやすくていいですね
830 = :
普通はそう考えるものだよ
831 = :
変数使わないべき、それ以外認めんと徹底抗戦してたのいたからな
832 = :
>>820が変数に入れるべきと言った途端
> 2回以上使う場合で、その間、変化が無いなら、変数に入れて使うべき
↓これだよw
> 変数使わないべき、それ以外認めんと徹底抗戦してたのいたからな
833 = :
本人参上w
834 = :
>>820
> 変数に入れずに、2回書いたら、その間にDOM に、
> 何か変化があるのかも、と思ってしまう
>
> 変化が無いなら、変数に入れた方が、わかりやすい
どういうこと?
変数に入れた所で、変化するでしょ?
$id = $('#id')
$id.text(123);
$id.text(); // 変数に入れたのに123に変わってる
jQueryにDOM要素の状態をさせるメソッドは
たくさんあるけど、どれも変数に入れても変化するものばかり
唯一の例外はremoveしても(DOMの状態は変化しているが)
jQueryオブジェクトには参照が残ってるってことぐらい
それだけなのに"変化がないなら変数に入れたほうがわかりやすい"は大げさ
835 = :
変数に入れてもDOMは変化してる
変数に入れていれば、その間になにも変化がないように言い方は
誤解のもとでしかないのでやめたほうが良い
$ul = $('ul')
console.log($ul.children().length) // 5
$ul.children().remove();
console.log($ul.children().length) // 0
--------
$ul = $('ul')
console.log($ul.children().length) // 5
$ul.append('<li>')
console.log($ul.children().length) // 6
--------
$ul = $('ul')
console.log($ul.parent().attr('id')); // undefined
$('#id').append($ul)
console.log($ul.parent().attr('id')); // id
836 = :
そりゃ再代入すりゃ変わるよ
837 = :
いや、再代入してないよw
----はただの区切り
別々の話ね。
838 = :
>同じjQueryオブジェクトを使う時には
とあるのに何入れ替えてるんだよw
839 = :
変数に入れても、
・DOM要素の内容は変わる
・DOMの構造も変わる
・DOM要素の参照は残ってる
って所かな?
jQueryとか関係なく
var elm = document.getElementById('id'),
って書いてるのと同じ。
ID=idをdocumentのDOMツリーからremove()しても、
elmという参照は残ったまま
逆に言えば、参照は残ったままだけど、
DOM要素への変更は反映される。jQueryでも同じ
840 = :
>>838
めんどくせーな。
これでお前でも理解できるだろ?
変数に入れてもDOMは変化するんだって
例1
function exp1() {
var $ul = $('ul')
console.log($ul.children().length) // 5
$ul.children().remove();
console.log($ul.children().length) // 0
}
例2
function exp2() {
var $ul = $('ul')
console.log($ul.children().length) // 5
$ul.append('<li>')
console.log($ul.children().length) // 6
}
例3
function exp3() {
var $ul = $('ul')
console.log($ul.parent().attr('id')); // undefined
$('#id').append($ul)
console.log($ul.parent().attr('id')); // id
}
841 = :
変数に入れておけば、異なる参照を指すことはない。
このリストが、別のリストに変わったりしない
変化する場合でも、その要素・コンテキスト以下・子孫要素しか変わらない
祖先の要素が変わって、別の要素を指すようになったりしないから、
意図がわかりやすい
842 = :
>>841
よく考えてほしいんだけどさ、
一行目、私は○○にデータを書き換えます。
二行目、○○にデータが書き換わった状態であってほしい
これの方が直感的だよね?
843 = :
>>840
そんなことは書かれる前からわかっとるわ、基本だろ
そういうことでなくて質問と>>838はDOMを変化させない前提だろうよ
パフォーマンス云々言ってるのだし
844 = :
だから変数に入れてもDOMは変化しますよって言ってるんだが?
変数に入れることで、どういう勘違いを
あなたはしてるのですか?っていう話
845 = :
順を追って説明しないと理解できてなさそう
1. DOMを変化させない前提
2. 変数に入れないと、DOMが変化するように見える
3. 変数に入れると、DOMは変化しないように見える
4. でも変数に入れても実際はDOMは変化する
5. つまり3は勘違い。変数に入れてるのをみてDOMが変化しないように見えたら、それは目が悪い。
846 = :
久しぶりに除いたが「変数使わないべき、それ以外認めん」の人がまた勘違いで話捻じ曲げて強引に押し通そうとしてるのか
847 = :
その話は知らんけど、>>845に何か物申すこと有る?
848 = :
おっと、覗いただな、失敬
849 = :
× 変数に入れずに、2回書いたら、その間にDOM に何か変化があるのかも、と思ってしまう
○ 変数に入れても、2回書いた時、その間にDOMに何か変化があることがある。
× 変数に入れるとDOMは変化しない
○ 変数に入れるとDOMを変化させてもDOM要素への参照は残っている
なんで正しい説明ができないんだろう?
850 = :
>>844
問題文をもう一度読もうか
先ずはそこからだ
類似してるかもしれないスレッド
- jQuery 質問スレッド vol.7 (1001) - [96%] - 2017/11/1 7:45
- + jQuery 質問用スレッド vol.7 + (136) - [76%] - 2022/12/5 13:00
- JavaScript の質問用スレッド vol.132 (1001) - [51%] - 2017/3/22 8:00
- + JavaScript の質問用スレッド vol.82 + (1001) - [48%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.89 + (1001) - [48%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [48%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.87 + (1001) - [48%] - 2011/6/21 6:33
トップメニューへ / →のくす牧場書庫について