jQuery 質問スレッド vol.7 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScriptでDOM用ライブラリであるjQueryのスレです。
このスレはjQueryやjQuery UIの使い方やjQueryプラグインの作り方を質問するスレです。
jQueryを使って作る側のスレであって、こんなプラグインありませんか?と聞くスレではありません。
そういうのは自分で探してください。
ろくにサポートもされてなさそうな野良プラグインの使用はおすすめしません。
JavaScriptの質問は関連スレで質問して下さい。
■前スレ
+ JavaScript & jQuery 質問用スレッド vol.6 +
http://echo.2ch.net/test/read.cgi/hp/1465566635/
■関連スレ
+ JavaScript の質問用スレッド vol.122 +
http://echo.2ch.net/test/read.cgi/tech/1472426483/
+ JavaScript(ECMAScript)質問用スレッド vol.122 +
http://echo.2ch.net/test/read.cgi/tech/1472401404/
+ JavaScript の質問用スレッド vol.131 +
http://echo.2ch.net/test/read.cgi/hp/1478053599/
JavaScript ライブラリ総合質問所 vol.5 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1465399470/
+ JavaScript & jQuery 質問用スレッド vol.6 +
http://echo.2ch.net/test/read.cgi/hp/1465566635/ >>622
そのセレクトボックスは単一選択だよな?
各optionにvalue="数値"(またはindex())で、それ取得してそのままArraylistのインデックス
$('@').change(function(){
Aを実行
});
あとdata()はjQueryがキャッシュ使うのでリアルタイム性には注意な >>625
を理由に毎回Ajaxで持ってくるようにします。
その方が組むのが楽ですね。
私がwebに初心者すぎるのが原因かと思いますが
キャッシュしておいて…みたいなのは
サーバ側でキャッシュデータとして登録しておいて
Jquery側のファンクションでキャッシュデータの読み込みができるってこと?
キャッシュデータの読み込みをajaxでやるっていうこと?
画面のhiddenに持つってことではないですよね?(これはいや) プラグイン作りの勉強をしています。
基礎的なことなのですが、プラグインの関数内で
呼び出し元のIDを表示するにはどうすれば良いのでしょうか?
$.fn.test = function() {
var id = $(this).attr('id'); //testを取得したい
alert(id);
};
$('#test').test();
これでは駄目でした >>631
これだと確かに実行されるのですが、自分の環境だと駄目です。(undefinedになる
環境と言ってもchromeで実行しているだけですが・・・
(あと、jQueryのバージョンを変えても同じです わかりました。もしかしてプラグインって<head>内に入れちゃ駄目なんですかね?
>>630のソースを</body>の前に書いたらアラートで「test」が表示されました。 >>633
そんな事はない
jQuery(function () { }); で括れば動作するが、プラグイン以前の問題だな
https://api.jquery.com/jQuery/#jQuery3 >>634
ほんとですね・・。
(function($) {})(jQuery);
で括っていたのが良くなかったのかもしれません。
もう少し基礎から勉強します。ありがとうございました。 > (function($) {})(jQuery);
> で括っていたのが良くなかったのかもしれません。
まったく関係ない
プラグインの作成自体はよっぽど変なものでない限り、
jQuery読み込みのあとならどこでも良い。もちろん<head>でもよい
ただ<head>に書くなら(正確に言うならば<タグ id="#test">登場以前に書くなら)
$(function() {
// Document is ready
});
を使わないとDOM構築前に実行されてしまうから見えないだけ あとな、例外的なプラグインもあるからあえて言わなかったんだが、
$('#test').test(); だけではなく、$('.test').test(); こういう風に
複数の要素にマッチする場合でも逆に全くマッチしない場合でも動くように作るのが良い
そしてチェーンできるようにするべき
だからこのサンプルのように、複数の要素に対して処理を適用してreturn thisするのが王道
※プラグインにおいてthisはDOM要素ではなくjQueryオブジェクトであることに注意
つまり>>630のように$(this)とする必要はない
https://learn.jquery.com/plugins/basic-plugin-creation/
$.fn.greenify = function() {
this.css( "color", "green" );
return this;
}
もしくは、複数の要素に対して一要素ずつ何かの処理を適用したい場合は、
eachでループするこっちのパターンもおなじみ
$.fn.myNewPlugin = function() {
return this.each(function() {
// Do something to each element here.
});
}; >>636-637
詳しくありがとうございます。
$(this)としていたのは、ID名をどうやって取得するのか?と思ったもので。
それで
var id = $(this).attr('id');
こういう書き方自体は間違いではないのかな?っと。
var id = this.attr('id');
こういう書き方の方が良いんですかね。 >>638
この場合はthisでええんやで$()は不要
通常のDOMオブジェクトではなくてjQueryオブジェクトで参照されるから >>639
わかりました。ありがとうございます。
引き続き勉強していきたいと思います。 >>629
どうにでもできるし、楽さはどれもさほど変わらない
自分がどうしたいかだけで毎回取得したいならそうすればいい
常に最新データを求めるならそうすべきで、その必要がないのなら冗長
サーバサイドならPHPの方が楽だしセキュリティ上有利 tableタグでクリックされた要素の次に来る要素をセレクタとする場合、
trをまたいでいる場合の簡単な指定方法はありますか?
↓でthをクリックしたらtdを選ぶ。としたいです。
<table>
<tr>
<th>...</th>
</tr>
<td>...</td>
<tr>
</tr>
</table> > クリックされた要素の次に来る要素をセレクタとする場合、
セレクタってなんですか? >>642
tdの位置が明らかに文法違反
セレクタ云々も用語の不理解が見られる
>>621と同じ指摘をする必要がありそうどな >>642
>>644のいうように文法おかしいけど
tableを起点で参照
$(this).closest('table').find('td');
親のtrから参照
$(this).closest('tr').next('tr').find('td'); >>645
素晴らしいセレクタありがとうございます。 jQuery APIの事をセレクタと表現してるのか
セレクタの意味を調べ直すべきだな >>642
HTMLはjQueryより難しいからな
よく見直せ >>639
便乗質問なのですが、$(・・・)のいらないthisだけでいい「この場合」とはどういう場合をさすのでしょうか? >>651
jQuery.prototype 上の関数の場合 >>653
jQuery.prototype.functionName
jQuery.fn.functionName わざと難しくしてるか説明できないか
いずれにしろ性格悪いのは間違いなさそう $.fn.myMethod = function() {
console.log(Object.getPrototypeOf(this));
}; くだらないことやってんなw
俺が終わらせてやるよ。
>>651
JavaやC#のクラスベースと呼ばれるオブジェクト指向の
thisはクラスのインスタンス自身と明確に決まってる。
だけどJavaScriptの場合そうとは限らない。
thisは呼び出し方で決まる。
obj.foo() と呼び出せば、fooの中でthisはobjになるし、
obj.foo.call(data) と呼び出せば、fooの中でthisはdataになる
つまり「この場合」とは "呼び出し側" の "呼び出し方" で決まる。
"呼び出され側" ではないことに注意な。
単純なライブラリであれば通常は、"呼び出し側" は俺らで書くことが多いが
ライブラリのプラグイン用のような仕組みや、イベントハンドラでは、
"呼び出し側" はライブラリ側が担当し、俺らは "呼び出され側" を書くことになる。
その場合に、 "呼び出され側" でthisがどうなるかは "呼び出し側" のライブラリの仕様によるというわけだ
今回の「この場合」とはjQueryのプラグインの場合は、 thisが
jQueryオブジェクトになるとjQueryの仕様で決まっている >>くだらないことやってんなw
俺が終わらせてやるよ。
www 本当に終わったな。
見事に別の話にすり替わっとるw どこにでも長々説明下手いるだろうに一々きにするなよ >>655,657
これが「煽っても無駄」というあれか
曖昧な質問にはヒントとなるキーワードやURLだけを返す
そういう質問者は大抵、「質問した内容以上に基礎知識が身についてない」ので、詳しい説明は時間の無駄と考えるからだ
(与えたヒントからそれなりに質問内容が絞り込んだ質問に発展するなら、その時にまた考えるがね)
だから、質問が具体的かつ分からない箇所が十分に小さな範囲なら、より詳しく回答する
実際のところ、>>656が十分なヒントを与えてくれていると思うけどな
それでも分からないなら、prototypeチェーンでぐぐれ(To: >>651) console.log($.fn.jquery);
console.log($().jquery); ここは質問スレ
これだけヒントを出して貰っていればで十分だろ?
というか、ちょっと検索すれば学習できることだが >>669
回りくどい
$(・・・)の場合→
thisだけでいい場合→
それだけ >>675
それだけってお前何も書いてないやんw
重要なのは→の右側だろ ヒントは出ているが、それを理解する頭がないか、質問を具体化する頭がないか、のどちらか 自分がわかるから相手もわかると思ってるのだろうな
後輩やら持ったことないのだろう 本当に理解しようと思う人には十分答えになっている
しかし、教えてくれくれ厨にはこのヒントはこたえるよな スマン抜けてた
「わかりやすく」答えられないのを濁してるのだろ 後輩と見知らぬ他人に教えるのでは全く状況が違うが、6>84は後輩に教えた経験があるのかね…
通常、後輩を教育する時には後輩の理解度を図る質問をしてから、基礎から段階を踏んで覚えさせる
だから、>>651のような曖昧な質問はさせないし、そんな質問が来たら説教ものだ
>>653の「難しい」も具体化出来てないから、質問として成り立ってない
基礎から質疑応答を繰り返して覚えさせるのは相当時間がかかるが、後で仕事で返して貰うための投資なのでそれはいい
が、赤の他人にそこまでやる義理は全くない
「で、君はどこまで分かってるんだ?」「prototypeは分かるか?」「関数は分かるか?」「今まで何を学習した?」
そんなやりとりを繰り返して質問者を答えに導くのは、このスレの役目ではないと思うんだがね Object.getPrototypeOf(this);
これを理解出来ない時点で何を説いても無駄 >>690
> だから、>>651のような曖昧な質問はさせないし、そんな質問が来たら説教ものだ
じゃあためにし、説教してみてよ?
自分で説教ものだっていったんだから
当然できるよね?
お前のレスみてると、なんかお前の説教のレベルが低い気がするんでねw >>690
誰からも相手にされない基地外みたいな輩だな >>692
「赤の他人にそこまでする時間はない」とはっきりいわなければ伝わらないのか
なぜ2chで家庭教師なみに一人の人に教えこまねばならんのだ
俺はそんな時間はないが、文句があるなら暇なあなたが説明すればいいんじゃないかね
それとも、あなたは質問者本人なのか? >>695
伝わらないに決まってるだろ。
最初からそう言えや。
Q 「○○をするにはどうしたら良いですか?」
A 「赤の他人にそこまでする時間はない」
って答えてればいいだろ >>696
> 伝わらないに決まってるだろ。
「赤の他人にそこまでやる義理は全くない」をあなたが読み飛ばしただけ
> Q 「○○をするにはどうしたら良いですか?」
> A 「赤の他人にそこまでする時間はない」
この書き方だと質問全般に回答しないように読めるが、質問者の理解度が分かる質問をすれば、答える
問題点を明確化しても内容を全く読まずに「回答しない」という都合が悪い事実だけを取り上げてあなたは煽ってるだけ
日本語の読解力を身に付ける事をお勧めする >>696
あと、繰り返すようだが、他人を煽り散らす暇があるなら、あなた自身が回答しろ
俺は回答しない理由を釈明したが、あなたは回答するべきだという
あなたがそういうなら、他人任せにせず、あなた自身が解決に向かうように自分から働きかけるべきだ 質問をするのは勝手だけど思い通りの解答を期待するのは間違い
ヒントでもレスくれるだけ有り難いと思いなさい >>658
質問者です。ありがとうございます、そして遅くなりすみません
「 "呼び出し側" のライブラリの仕様によるというわけだ」まではわかります
インスタンスもなんとなくですが
ただ$(・・・)有無、区別が曖昧というか理解度が浅いようです
で、>>692は質問者ではないです >>700
jQueryの話だろ?
イベントハンドラ内のthisはDOM要素
ぐらいしか意識することはないぞ。
jQueryプラグインなんて普通書かないだろ?
jQueryプラグインの場合はthisがjQueryオブジェクトってだけだ。 >>701
>jQueryの話だろ?
そうです
ネイティブjsも書きますがjQでの質問です
>jQueryプラグインなんて普通書かないだろ?
書きません >>700
this は何を差すのか?それだけ
バカ セレクタが従兄弟関係にあれば処理って無理?
特定のクラスがあって、親に遡り、その兄弟の子供に
処理を加えたい
つまりイトコ。ググっても出てこないんだよな… >>707
兄弟 = $(特定のクラス).closest(親);
兄弟.children(); >>708さん
納得行く結果に辿りつきましたありがとう( TДT)
2ちゃん住人最強( TДT) 自演を疑うやつは、だいたい劣等感が強くひがみ根性が強いやつ
そういうやつは感謝された人間や、称賛を浴びた人間を目ざとく思う
事もあろうに素直に客観でみれず難癖をつけだす始末
なぜ、そう思うか?私がそうだからである
自分で盛り上げるネタもないやつが偉そうに
単発批判してんじゃねーぞカス
IDつかないスレで自演とかナンセンスなこといってる愚かさに気づけよw 相変わらずここは・・
ヒント、回答とか言ってるわりにずれてるし
質問者のほうがレベル上では >>718
どうせお前このスレを荒らしに来ただけだろ?
数日間レスが止まってるところに、誰宛かも
わからないこと書き込んで。ばればれ 似たようなオブジェクト2つを変える関数を作っています。
仮に2つは$('#hoge-L')と$('#hoge-R')とします。将来的に2つを超えることはありません。
実際は様々な処理をしていますがここでは説明のため色を変えるだけとします。
様々な処理と言ってもLとRの違いだけで関数内の他は同じコードで共通化しています。
実際は色を変える関数、○○を変える関数など多数あり、全てLとRを操作します。
LとRは、片方だけ変えることも両方変えることもあります。
LとRの変更色は同じ場合も違う場合もあります。
で、とりあえずは
function changeColor(args,c){
$('#hoge-' + args).〜cに色変更;
}
changeColor('L',c1);
としましたが両方変える場合
changeColor('R',c2);
と2回呼び出さなくてはなりません。
これを1回呼び出しにしたいのですがどんな方法がいいでしょうか。 721の続き
(1)配列渡し
changeColor(['R',c2]);
changeColor(['L',c1,'R',c2]);
(2)引数を2つ分に固定しnull渡し
changeColor(null,null,'R',c2]);
(3)可変長引数
arguments使用
(4)(2)に加え部分適用
var pmL = function(L,c1){
return changeColor(L,c1,null,null);
}
pmL(L,c1);
とRの分。関数やたら増えますが。
(5)名前付き引数
changeColor({L:c1,R:c2});
最も自然な気がしますが引数が少ない今回の件でどうかと。
(6)その他
皆さんならどうしますか。 idなしかよ
$('#hoge-'+args)
じゃなくて
$(arg)
にして
"#hoge-L,#hoge-R"
を渡すってわけにはいかんのかね changeColorなどを実行するのに何かしらのイベントがあるとして
>LとRは、片方だけ変えることも両方変えることも
とのことだから、「LとRそれぞれ操作 or LとR同時に操作」に対応したイベント発火ボタン要素みたいなものが複数あるパターンとすると
https://jsfiddle.net/wd8gzh70/ ■ このスレッドは過去ログ倉庫に格納されています