JavaScript ライブラリ総合質問所 vol.4

このエントリーをはてなブックマークに追加
845Name_Not_Found:2015/02/26(木) 17:09:51.10 ID:???
>>841
Google Maps API
846Name_Not_Found:2015/02/26(木) 17:51:47.87 ID:???
DOMでできることは
jqueryでもできるってことで間違いないの?
847Name_Not_Found:2015/02/26(木) 18:19:27.10 ID:???
そりゃそうだろ
848Name_Not_Found:2015/02/26(木) 18:25:27.55 ID:???
それは語弊がないか?
jQueryはDOMの全てをカバーしてるわけじゃない
例えばテキストノード操作に関してはかなり貧弱
849Name_Not_Found:2015/02/26(木) 19:20:15.56 ID:???
テキストノードの操作って何が必要なんだ?
850Name_Not_Found:2015/02/26(木) 23:23:39.97 ID:???
jQueryにはtextContentしかないからなあ
851Name_Not_Found:2015/02/26(木) 23:30:39.39 ID:???
だから他に何が必要なんだ?
DOMにある機能で。
852Name_Not_Found:2015/02/26(木) 23:36:11.16 ID:???
dataプロパティとか、テキストノードをreplaceChildとか
853Name_Not_Found:2015/02/26(木) 23:37:09.18 ID:???
そもそも、jQueryではテキストノードを選択できないな
854Name_Not_Found:2015/02/27(金) 11:34:29.65 ID:???
テキストノードは、idもclassも付けられないんだから
選択しようがないと思うが。
DOMでも選択はできないよね?

DOMでできることはchildNodesで列挙して行くことなわけで、
それと同じことならjQueryではcontents()で可能

DOMで選択はできないが、childNodesで列挙することはできる。
それをjQueryではcontents()で出来る。

だから「DOMでできることはjQueryでもできる」は間違いじゃないよ。
855Name_Not_Found:2015/02/27(金) 12:07:04.21 ID:???
jQueryが便利すぎて別言語に思うこともあるけど、ただのライブラリなんだよな
856Name_Not_Found:2015/02/27(金) 12:58:57.21 ID:???
>>854
> DOMでも選択はできないよね?
DOM ならテキストノードを参照できる
XPath の text() を使ってもいいし、要素ノードから firstChild や childNodes を辿ってもいい
857Name_Not_Found:2015/02/27(金) 13:13:52.19 ID:???
>>854
> それをjQueryではcontents()で出来る。
で、>>852をどうやって実現する?
858Name_Not_Found:2015/02/27(金) 13:29:18.50 ID:???
例えば、こういうコードは jQuery だけでは書けない
http://jsfiddle.net/eh65ytw3/
Text#data や TEXT_NODE の replaceChild に成り代わるものが jQuery API には存在しない
859Name_Not_Found:2015/02/27(金) 13:44:45.93 ID:???
>>858
jQuery を使うならこうかな
http://jsfiddle.net/eh65ytw3/1/
DOM API を使わないと書けそうにないね
860Name_Not_Found:2015/02/27(金) 14:04:39.48 ID:???
jQuery の場合、要素ノード操作に特化しすぎてる感があるな
Node#firstChild, Node#lastChild, Node#nextSibling, Node#preventSibling 等の足りないAPIが多すぎる
861Name_Not_Found:2015/02/27(金) 14:23:23.82 ID:???
まあDOM APIを使ったとしてもテキストノードは扱いづらいからな
<span>で囲めばいいだけの話だし、jQueryがテキストノード操作を捨てるのは妥当だと思うよ

「DOMでできることは jqueryでもできる」とは言えないだろうが、それは当たり前。
よく使う操作を楽にするのがライブラリの本領だから。
862Name_Not_Found:2015/02/27(金) 16:29:47.02 ID:???
昔(1.2より前)はxpathのセレクタもサポートしていたみたいだけどね

でもテキストノードを選択出来たとしても、jQueryのメソッドが
要素と同じように適用できるとは思えないけれど
863Name_Not_Found:2015/02/27(金) 16:49:40.68 ID:???
結局、jQueryではテキストノード操作は出来ないのか
テキストノードが選択できないといったり、テキストノード操作が出来るといったり、彼の主張は前言撤回が多すぎて説得力ゼロだな
864Name_Not_Found:2015/02/27(金) 16:55:59.78 ID:???
>>862
> でもテキストノードを選択出来たとしても、jQueryのメソッドが
> 要素と同じように適用できるとは思えないけれど

当たり前じゃね? テキストノードっていうのは
要素じゃないんだから、それはそもそもDOMの問題だ。
865Name_Not_Found:2015/02/27(金) 16:57:23.82 ID:???
DOM要素単位で扱うものなんだから
ノード操作が出来ないのは当たり前だろ
866Name_Not_Found:2015/02/27(金) 17:12:22.15 ID:???
.text() で値は取れるな (.nodeValue が返される模様)
セットはできないけど
867Name_Not_Found:2015/02/27(金) 17:15:11.81 ID:???
>>866
text() は引数を与えればセットも出来るが、これはtextContentであってテキストノードを参照しているわけではない
http://api.jquery.com/text/
868Name_Not_Found:2015/02/27(金) 17:17:53.75 ID:???
JavaScriptでマシン語が使えないの?って言ってるようなものだろ
869Name_Not_Found:2015/02/27(金) 17:25:48.33 ID:???
jQueryのソース見ると、こんな感じでnodeTypeみて処理しているから、
何かしらの意味があってやってるんじゃないかな。

text: function( value ) {
return access( this, function( value ) {
return value === undefined ?
jQuery.text( this ) :
this.empty().each(function() {
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
this.textContent = value;
}
});
}, null, value, arguments.length );
},
870Name_Not_Found:2015/02/27(金) 17:29:20.41 ID:???
>>868
プリコンパイルされたライブラリとか欲しいね
まあプラグイン経由とかだったり署名付けたりとか色々と面倒そうだけど
871Name_Not_Found:2015/02/27(金) 17:29:42.81 ID:???
DOM APIを使った事がなくてjQueryで何が出来るか知らない人が何でも出来るとほらを吹いただけか
872Name_Not_Found:2015/02/27(金) 17:31:12.64 ID:???
>>871
お前jQueryに親でも殺されたの?
873Name_Not_Found:2015/02/27(金) 17:35:55.16 ID:???
>>869
それの jQUery.text(this) の所が取得側なんだけど
jQuery.text = Sizzle.getText;
ってなってて Sizzle.getText;では
} else if ( nodeType === 3 || nodeType === 4 ) {
return elem.nodeValue;
}
こういう部分があるね
これでテキストノードでも値が取れる
874Name_Not_Found:2015/02/27(金) 17:39:04.14 ID:???
>>872
JavaScriptスレでも暴れていたし、jQuery信者をうざいと思ってる人は相当数いるんじゃない?
875Name_Not_Found:2015/02/27(金) 17:44:32.42 ID:???
>>873
それはSizzleだから対応しているって感じでいいのかな?
Sizzleだと取得しか必要ない気がするし。

SizzleのCSS4対応ってどうなるんだろうか。
一応するみたいだが、そもそもCSS4がまだ使用が固まってないんだっけ?
https://github.com/jquery/sizzle/issues/237

CSS4でもテキストノードを選択する方法はないのかな?
876Name_Not_Found:2015/02/27(金) 17:45:07.63 ID:???
>>874
俺の知る限り、一人が過剰に拒否しているだけに見えるね。
877Name_Not_Found:2015/02/27(金) 17:48:04.33 ID:???
CSS: Selecting text nodes (as with XPath’s text())
http://www.opinionatedprogrammer.com/2011/01/css-selecting-text-nodes-as-with-xpath-text/
> There used to be a :contains() pseudo-class for this in a CSS 3 draft, but it’s gone.

ほー、どうやらCSS3の仕様として:contentsというのがあったらしい。
けど無くなったと。だれか経緯しらない?
878877:2015/02/27(金) 17:51:27.26 ID:???
あ、なんか勘違いか。
879Name_Not_Found:2015/02/27(金) 18:04:27.31 ID:???
>>876
反応するかは別として回答の質を落としてるのは間違いないな
880Name_Not_Found:2015/02/27(金) 18:06:19.46 ID:???
それはjQueryを使わない回答をする奴がいないのが悪いんだろう?
881Name_Not_Found:2015/02/27(金) 19:58:48.79 ID:???
jQueryを使った回答でもあるだけありがたいよ。
簡潔に書いた動く擬似コードだと思って
それをDOM APIに置き換えればいいだけの話だし。

一番うざいのが、jQuery信者がーとかいいだすやつ。
いつもあいつをきっかけに荒れる。
882Name_Not_Found:2015/02/27(金) 22:20:21.74 ID:???
>>880
>>854のようなjQuery方面だけに知識が偏っていて間違った回答なら無いほうがマシです
質問しても変な方向に切り返してきていちいち訂正するのが面倒くさいです
無視したら誠実さを疑われるのでスルーするわけにもいかないですし
それから、jQuery以外の回答もjQuery信者がスレに張り付いているのでjQueryの回答だけ目立って見えるだけで普通にあります
たくさんの間違った知識で答えるjQueryの回答よりも確かな知識で回答してくれる一人の回答の方が何倍も価値があります
883Name_Not_Found:2015/02/27(金) 23:24:35.38 ID:???
>>882
つまり、間違った回答じゃなければOKだよね?
逆に間違った回答なら、DOMでもNGだよね。
884Name_Not_Found:2015/02/28(土) 00:22:33.36 ID:???
シンプルな質問
googoleメールや
twitterくらいあんとみたいな
動的なサイトなら
jqueryでバリバリ作れるってことだよね?
885Name_Not_Found:2015/02/28(土) 01:00:11.15 ID:???
はい
886Name_Not_Found:2015/02/28(土) 03:27:42.69 ID:???
http://netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css

bootstrapのこのファイルが読み込み状態になったままで止まります
もっといいCDNありますか?
887Name_Not_Found:2015/02/28(土) 12:36:30.85 ID:???
一時的なものでした
888Name_Not_Found:2015/03/07(土) 19:19:09.53 ID:gZ1CpGNy
document.getElementById("content").firstChild

これをjQueryのAPIを使った場合はどう書くんでしょうか?
$("content").children().first()
これだと#content以下の子要素を全部取得してから最初の子要素を返すので何か違う気がしました
889Name_Not_Found:2015/03/07(土) 19:25:32.60 ID:???
document.getElementById("content").firstChild

$('#content :first-child')
890Name_Not_Found:2015/03/07(土) 19:36:46.46 ID:gZ1CpGNy
高速化のためにobj = $("#content")みたいにして使いたいんですけど
セレクターに指定するしか方法ないですよね
891Name_Not_Found:2015/03/07(土) 19:40:38.12 ID:???
>>890
そんなことやっても、
一回あたり0.1ミリ秒未満しか高速化出来ないけど、
その処理何回実行されるの?
892Name_Not_Found:2015/03/07(土) 20:07:43.20 ID:???
>>890
セレクターの内部の仕組みについて
http://qiita.com/setzz/items/25064020f199e35d65db

セレクターでIDを使った場合に動くgetElementByIdのパフォーマンス
http://attosoft.info/blog/getelementbyid-performance/

IDを使ってるなら、毎回セレクターで取得しても問題ないかな、
古いバージョンのIEだとキャッシュを持つのは有効だと思う
893Name_Not_Found:2015/03/07(土) 20:12:53.72 ID:gZ1CpGNy
IE9以上で動けばいいのでセレクターで取得するようにします
894Name_Not_Found
質問を無視しないでください。