のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,432,589人
昨日:no data人
今日:
最近の注目
人気の最安値情報

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

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

451 = :

>>390 のようなコードを書かずに済む様に
$(this) の戻り値の仕様を、無いときはデフォルトの機能はするが何もしない
オブジェクトを返すように変更するってできるのかな?

あと、一般論的にライブラリをそういう風に設計するって悪い方法?

452 = :

>>451
> $(this) の戻り値の仕様を、無いときはデフォルトの機能はするが何もしない
> オブジェクトを返すように変更するってできるのかな?

何を言ってるのかよくわからない。

この話?
http://api.jquery.com/jQuery/#jQuery
> Returning an Empty Set
>
> As of jQuery 1.4, calling the jQuery() method with no arguments
> returns an empty jQuery set (with a .length property of 0). In previous
> versions of jQuery, this would return a set containing the document node.


jQuery()を引数なしで呼び出したら、空のjQueryセットを返します。

var $obj = $();
$obj.css(~) // 何もしない

453 = :

自分が想像できないものはないw
なんというお粗末な知性だろうか

454 = :

(何も言えないどうしよう・・・)

(そうだ!相手に考えさせちゃえ)

(自分も言えないが、相手を馬鹿にできるぞ!)

455 = :

>>454
それはみんなわかってるからw

456 = :

では実際のコードを少し変更したものを。

if ($.Hoge($(this).css('backgroundColor'))) === moge){
$(this).addClass('page');
}

$.Hogeは色情報を扱うjqueryプラグインです
背景色を正規化した上で比較し、クラスを設定しています
これをどう変えたらいいですか?

457 = :

ちょw
ふたたびお口チャックすかww

458 = :

フリーズww
メソッドチェーン(わらい)で何とか出来るんじゃないんすか

459 = :

>>452
そうか、別に null 返すわけではないのか
if($(this)~)を if($(this))と読み違えてた

460 = :

何かおかしいなって思ったら
最初に「いや自分が間違えてるんじゃないか?」って思うようにすれば恥かかなくて済むよ
それがA級プログラマーの思考習慣

461 = :

>>456
それは設計がおかしいね。HogeがjQueryプラグインになっている理由がない。
つまり、jQueryの基本、「セレクタにマッチした要素全てに処理を行う」を満たしていない。

変な(jQueryの思想を理解していない)プラグインを作っちゃったからそうなったわけ。
jQueryプラグインとしてに書くならこうだよ。

$(this).filter(function() { return $(this).css('backgroundColor') === moge}).Hoge().addClass('page')

応用するとこんな風にしてコードの再利用もできる。

function cssFilter(name, value) {
 return function() { return $(this).css(name) === value }
}
$(this).filter(cssFilter('backgroundColor', moge)).Hoge().addClass('page');

462 = :

$(this).filter $(this).css
複数回生成してね?

463 = :

お、少し読み間違えていたw

こうか。

function hogeFilter(name, value) {
 return function() { return $.Hoge($(this).css(name)) === value }
}
$(this).filter(hogeFilter('backgroundColor', moge)).addClass('page');

どちらにしろ、$.HogeをjQueryプラグインにする理由はないけどね。

465 = :

>>462

いや、そもそもこういうコードが
怪しいって話だから。

> if ($(this)~){
> $(this).css~
> }

> $(this).filter $(this).css

この二つのthisは同じものを
指しているわけじゃないから話が違う。

466 = :

> この二つのthisは同じものを
> 指しているわけじゃないから話が違う。

もう少し詳しく説明すると、

  $(this).filter(hogeFilter('backgroundColor', moge)).addClass('page');

このコードの$(this)は、ここではたまたまthisだけど、セレクタに変えられる。

話を脱線すると

  $('span').filter(hogeFilter('backgroundColor', moge)).addClass('page');

こうすると、全てのspanの中でbackgroundColorがmogeであるもの全てに
pageクラスをつけることが可能。

これは if で条件分岐していたときには、単数しか処理できなかったのに比べて
jQuery風にセレクタに当てはまるもの全てを処理できるコードになってるわけ。

で、話を戻して、二つのthisの違いだけど、

$('span')はすべてのspanだけど、$(this).cssはfilterで呼ばれるから一つのspanになる。

ね? 違うものでしょ?

467 = :

かっこいいな。ifがなくなっちまってる。
これが関数型言語脳か~w

468 = :

そういう中身に関係のある条件ならいいけど、
関係のないのでも filter使ってんの?

たとえば、何かしらの条件でハンドラを付け外しする場合

$('.foo').css('foobar', 'hoge');
if (piyo == 3) {
 $('.foo').click(function () {});
}
$('.foo').mouseup(function () {});



$('.foo').css('foobar', 'hoge')
.filter(function () {
 return piyo == 3;
})
.click(function () {})
.end()
.mouseup(function () {});

こんな感じか…

469 = :

>>461
今度は「なっている理由がない」かよw
プラグインにしたんじゃなくてそういうプラグインを使ってるだけなんだが
なんでどこまでも頓珍漢なんだろうな

470 = :

filter使ったらすっきり書けました
ありがとうございました
(と良いところを素直に認めるのもA級プログラマーの重要な資質)

472 = :

質問も回答も疑問をそのまま質問にすればいいだけなのに、なんで否定が先行するかなあ
おおらかな気持ちをもってほしいね

473 = :

>>412
IEなら、F12を押して、デバッグ実行してみ。
それで、エラーになる部分を、前後を含めて書いて。
IEのバージョンも書いて

>オブジェクトでサポートされていない
>プロパティまたはメソッドです
IEのバージョンが古くて、その機能に対応していないのかも。
IEをバージョンアップしたら?

474 = :

filterの考え方を導入するとlodashのメソッドチェーン途中で抜けられない問題も解決できそうな気が。
スカラー値であってもコレクションのように扱ってフィルタする感じ?

475 = :

>>474
その手があったか!
ますますlodashの価値が高まるな

477 = :

filterしたあとにfilterしてないものの集合を得るにはどうしたらいいですか?
end()したら、フィルタ前に戻せますが、
フィルタしてないものを得ようと思ったら再び全体にfilterをかけなくてはいけないのが
クールじゃないです

478 = :

filter→filter→end
ってやったらどの時点に戻るんだろ?

479 = :

>>477
もうちょっとクールな日本語で説明たのむ

480 = :

>>478
ひとつ目のfilterの後

481 = :

>>479
アスペは黙って寝てろ

482 = :

>>481
>フィルタしてないものを得ようと思ったら再び全体にfilterをかけなくてはいけない
この行の意味が解らない

484 = :

if ~ else ~
みたいなことをfilterを使ってしたいのです
最初のfilterでif~は出来ますが、
else~をするには、endで元に戻してからまた条件を逆にしたfilterをかけないといけなくて
それがダサいのです

486 = :

filterをかけた時の元オブジェクトってどこに保存されてるんですかね?
それが分かればそういうプラグインかけるのでは

488 = :

>>274,370,412,487
懲りない人だね
>>473

491 = :

あなたに言ったのではありません

492 = :

>>485
適当に作れば?

$.fn.else = function(){
 var _this = this;
 return $($.grep(this.end(), function(n,i){
  return $.inArray(n, _this) == -1;
 }));
}

493 = :

>>477
> filterしたあとにfilterしてないものの集合を得るにはどうしたらいいですか?

俺だったらこうするかな。

var a = [], b = [];
$('.foo').each(function() {
 if ($(this).なんとか) {
  a.push(this);
 } else {
  b.push(this);
 }
});
$(a).text(1);
$(b).text(2);

switchなどを使えば、3つ以上でも分割できる。

jQueryプラグインを作るならばこういうのも出来なくはないけど、ちょっと見にくそうだ。
$('.foo').filter2(
 function() { return $(this).なんとか; },
 function() { /* trueの時のjQueryuオブジェクト */ },
 function() { /* falseの時のjQueryuオブジェクト */ },
);

Deferredっぽく以下の様なコードも考えたけど、
使う機会を考えると、作るまでもないかな。

var obj = $('.foo').filter3(function() { return $(this).なんとか; });
obj.trueCollection(function() { /* trueの時のjQueryuオブジェクト */ });
obj.falseCollection(function() { /* falseの時のjQueryuオブジェクト */ });

494 = :

なんでみんな「filterしてないもの」=「filterで抽出されなかったもの」なんて理解できるんだ?
おれは>>484の説明でやっと理解できたよ
普通は「filterしてないもの」=「filterする前のもの」だろ?

495 = :

>>494
2行目でする前の物の話してるんだから
消去法で分かるだろ

496 = :

まさか「filterしてないもの」!=「filterする前のもの」なんて想像もできなかったわ
みんな凄いな

498 = :

>>494
お前がアスペなだけ

499 = :

XSSで勝手にRTされてました
ログアウトしたらログインできなくなりました
ツイートに含まれたスクリプトそのまま実行するってどんだけ

500 = :

ろーだっしゅってクソなんですか?


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について