元スレJavaScript ライブラリ総合質問所 vol.4
JavaScript覧 / PC版 /みんなの評価 :
901 = :
jqueryっていつのまにか勝手にCSSのベンダープリフィックスをつけるようになったんですか?
902 = :
jqueryで$("ul", "li")
みたいにセレクターを2つの引数にわけて書く方法を見たんですがこれはjqueryのどのページで説明されてますか?
904 = :
なるほど、書いてました
$("ul", "li")じゃなくて$("li", "ul")ですね
905 = :
>>904
勘違いしているようだが、selectorを分けて書いてるわけではないから、そのコードは動かないぞ
906 = :
え、http://api.jquery.com/jQuery/#jQuery2のことですよね
第二引数が親要素、第一引数がその子要素ってことじゃないんですか?
907 = :
>>901
そういやそんな機能あったね。
調べてみたら1.8からみたい。
まあ、jQueryでCSSを書き換えるべきではない。
クラスを変えるべきって思っているから
あんまり気にするところだとは思わないけど。
908 = :
>>902
これの使い方いまいちよくわからないんだよね。
$("ul").find("li")でできるじゃん?
短く書くことは出来る。でもそれぐらいしか違いがわからない。
速いのかと思えば、findの方が速いって記事もあるし。
一体何を想定して作られたんだろう?
909 = :
htmlStringは<から始まってないとダメだから
http://api.jquery.com/jQuery/#jQuery-selector-context
こっちだね
jQuery( selector [, context ] ) は内部的には jQuery(context).find(selector) と同じだから、
今はちゃんと動くけど
context
Type: Element or jQuery
ってなってるから、あやしいと思うんだけどね
910 = :
jQueryは同じ操作をするのに幾つか方法があるのが結構あるぞ
911 = :
>>910
他のは使い方が違ったり、readyとかは
「よく使うから短く」という考えで理解できるんだよ。
だけど、$("li", "ul") はそんな感じがしないんだよね。
引数が逆になってるのが気持ち悪いのかな?
第二引数で親要素を指定できる必要があったのだろうか?って考えてしまう。
もしかして本当はこうやって使うものだろうか?
$('li', element);
つまり第二引数はセレクタではなく親要素
これだと$(element)に比べて、jQueryオブジェクトを作らなくていい
(内部的に作ってないのかどうかは知らない)から
パフォーマンスが高い(かは調べてない)とか?
912 = :
>>906
その事例なら第一引数はHTMLタグ文字列、第二引数はdocumentオブジェクトでselectorTextは出てこない
英文をちゃんと読んでる?
913 = :
>>909
そちらの方が近いけど、第二引数はselectorTextではないし、>>904が勘違いしているとしか思えない
一体、どの文面を読んで>>904に至ったというのか
914 = :
そうそう>>906の正しい方には、contextって書いてあるんだよな。
jQueryでいうcontextってなんなんだろうか?
って思ったら、addとかにもcontextあるのか?
そして、deprecatedになっている.contextプロパティ。
もしかして古いjQueryの仕様なのかな?
915 = :
> context
> Type: Element or jQuery
> A DOM Element, Document, or jQuery to use as context
ちゃんと書いてあるだろ
原文読まずにいい加減に脳内補完するから迷うんだ
916 = :
$("li", "ul")でも動くけど$("li", "<ul>")って違いなくない?
別に<>で囲まなくてもelementとして認識してるんじゃないの?
917 = :
>>915
俺にいってるの?
誰に何をいいたいのかさっぱりわからないんだけど。
ちゃんと説明して。
919 = :
>>917
>>914にいってる
セレクター文字列を渡す仕様なんてどこにも書かれてないだろ
どこをどう読んだらそんな解釈になるんだ?
実際、動くことは動くが、jQuery仕様外の動作の上に子孫セレクタを使っているのと何も変わらん
http://jsfiddle.net/uyojzsj6/
920 = :
そう、つまり第2引数で
Type: Element or jQuery
であることのチェックをしてないだけだね
リリースノートにもかかれずに変更される事もありえる
(ドキュメントが実装に合わせて変わる可能性もあるけど)
921 = :
$()の2番目の引数は、検索対象の文書を指定する時に使う。
$(selector, window.opener.document)
→親ウインドウの文書から検索
922 = :
$(window.opener.document).find(selector)
これでもいいけどね。
ここに書いてあるとおり、findで実装されているわけで。
http://api.jquery.com/jQuery/
> Internally, selector context is implemented with the .find() method, so $( "span", this ) is equivalent to $( this ).find( "span" ).
926 = :
>>925
1度イベントが発生したら関数を登録しなおせばいいのでは?
927 = :
>>926
ありがとうございます。
下記の方法で解決しました。
①外部サイトをphpで取得、遷移発火部分のクリックイベントをキャッチし②を操作
②上記①をiframeで読み込む。クリックイベントによりiframeを非表示
929 = :
こんにちは!
【環境】IE8, Chrome
【ライブラリ】jQuery UI
【何をしたのか】
【期待する結果】
下記のようにHTML要素をボタンクリックで横に動かしたいのですが
どのように書けばよいでしょうか?
ボタン ボタン
↓ ↓
【prev】 (テキスト)【next】
930 = :
ビッ○カメラ札幌店の副店長の佐藤伸弦が暴行事件が起きていた
佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
933 = :
div#aの子要素の相対位置を取得したいんですが
先頭の要素なら0が欲しいんですが20が返って来ました
どうやって取得できますか
http://jsfiddle.net/p3sc6mL3/
937 = :
>>931
要望・バグとして中の人に報告してみれば?
そもそも data-* 属性を読んでいるにもかかわらず、>>932 が指摘しているような dataset のプロパティ set 時に起こるべき本来の副作用(属性作成や属性値変更)を伴わない。
これは明らかに手抜き実装によるバグだな。
なぜなら、jQuery の中の人にとって古めかしいと言われている IE8 ですら getter, setter はサポートされているので、簡単に polyfill 可能だから。
938 = :
>>937
> これは明らかに手抜き実装によるバグだな。
何いってんの? DOMでも一緒だよ。
何でもかんでもjQueryの問題にするな。
939 = :
>>937
>>936にも書いてあるけどHTML(属性含む)は初期値を示す
バグではなくドキュメントにも明記してあるから想像で書き込まずにまず確認しよう
http://api.jquery.com/data/#data-html5
> The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated
ちなみにjQuery 1.4.2以前では、HTMLのdata-***属性は jQueryの.data()の初期値ですらなかった
data-***属性が初期値であるのはおまけ程度に考えたほうがいいだろう
940 = :
data-* 属性は文字列でなくてはいけない
.data()でセットできるのはオブジェクト
これを考えてみると、.data()にセットしたものをdata-*属性に反映させるというのが
無茶というのがわかるでしょう
ちなみに、data-*属性にJSON形式でセットしておくと、
.data() で取り出した時にはデコードされている
これを可逆にするんなら、.data()でセットできるオブジェクトは
JSON形式にできるものだけになっちゃう
これも今更無理
941 = :
文字列でなければならないのではなく、HTMLの属性値なので取得時にJSの文字列になりますよということ。与える時には数値でも何でもよくて、それをJSでsetAttribute() すれば文字列表現に変換される。
無茶でも何でもない。JSのオブジェクトリテラルをそのままセットすれば良いだけ。
942 = :
何故JSON?
その略語を展開すれば解ると思うが、そもそもそれはJSのオブジェクトリテラルに制限を付けたサブセットだ。
だから、JSのオブジェクトリテラルそのままを書けば良いだけ。
もっと古きを言えば、そもそもオブジェクトリテラル自体は読み取り時の表現形式だったが、17年前くらいにJSコードで書けるようになった。JSのデータ表現文字列としてはそれ以前の本当に初期から存在するのに知らないとかどうかしてるだろ君は草
943 = :
ていうか、IE4からIEには18年もexpandoプロパティというものがあってだな、data-* なんてのはそれをパクった上に属性名(JS用語だとプロパティ名)を別物にしてIE非対応としてIEを貶めるための嫌らしい政治的戦略なわけだ。
とりあえずそのexpandoには何でもセット出来た。
もっと言えばだな、IE5.5には#default#userDataというものがあってだな、その中でmsxmlやり放題だったわけ。その超絶有用な発展的独自仕様を捨てるそうだが、糞なHTML5にダウングレードするのは楽だがアホらしい作業だろうなと同情するわ。
944 = :
まあとりあえずそのjQueryの実装は手抜きだな。
飽きてんだろうな、ソース読んでもテキトーにやってます感が漂っている感じがする。
jQuery終わっとるな。
たぶん、backbonejs未満のヘルパーライブラリーに集約されるんだろうな。
要らん工夫は要らんと。
たとえば、今更のprototypejsをprototypeじゃなくてオブジェクト(いわゆるクラス)のメソッドとして定義する。
使う時はcall/apply強制ということ。
たとえば今のArray.map(ArrayLike, ...thisObj)みたいな使い方。
しかしこれは現在猛烈に普及中のアロー関数で面倒くさいことになる。
なかなかうまくいかないねえ。
945 = :
ソース読むだけでテキトーかどうかわかるのか。凄いなあ
俺もその能力が欲しい
947 = :
>>942
data-*属性に格納する例だからJSONなのでは?
949 = :
>>944
> まあとりあえずそのjQueryの実装は手抜きだな。
違うよ。よりよい実装だよ。
例えば、element.onclickに代入しても、
要素のonclick属性は作られない。
それと一緒だよ。
950 = :
>>947
じゃあこれだとどうなると思う?
var a = {}
a.foo = function() {};
a.bar = new Bar();
$('div').data('bar', a);
要素に紐付けたいデータというのは
文字列に出来るものだけじゃなくて、
オブジェクトも有りえるんだよ。
datasetで出来るのは文字列で表せるものだけ。
だから限界があるんだよね。
類似してるかもしれないスレッド
- JavaScript ライブラリ総合質問所 vol.5 (344) - [97%] - 2022/3/14 17:45
- jQuery ライブラリ 総合質問所 vol.4 (986) - [78%] - 2016/1/12 15:15
- 【jQuery】JavaScript ライブラリ総合質問所 vol.3 (1001) - [75%] - 2014/6/18 20:58 △
- 【jQuery】JavaScript ライブラリ総合質問所 vol.2 (986) - [75%] - 2013/5/20 7:00
- 【jQuery】JavaScript ライブラリ総合質問所 vol.1 (983) - [75%] - 2012/10/8 22:30
- [JavaScript]プログラム作成します (981) - [37%] - 2010/12/8 21:02
トップメニューへ / →のくす牧場書庫について