X



+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
0001Name_Not_Found
垢版 |
2016/11/01(火) 21:15:50.05ID:???
JavaScriptで一番有名なDOM用関数型風ライブラリであるjQueryのスレです。
jQueryを使うとJavaScript単体では面倒な処理でもほんの数行で実現可能になります。

一部でもうjQueryは要らない等と言ってますが、あれはjQueryよりも導入が大変な
フレームワークを導入したらいらなくなるって話であって、従来通りHTMLにちょっと
動きをつけたい程度ならjQueryが最適です。

このスレはjQueryそのものの使い方やjQuery UIの使い方やjQueryプラグインの作り方を質問するスレです。
JavaScriptだと面倒だけどjQueryを使えばもっと簡単に書けませんか?というのもOKです。
ですが、jQueryを使って作る側のスレであって、こんなjQueryプラグインありませんか?と聞くスレではありません。
また野良jQueryプラグインの質問スレでもありません。そういうのは自分で探してください。
ろくにサポートもされてなさそうな野良jQueryプラグインの使用はおすすめしません。

前スレ
+ JavaScript & jQuery 質問用スレッド vol.6 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1465566635/
0003Name_Not_Found
垢版 |
2016/11/01(火) 21:16:30.88ID:???
Q. jQueryはどのバージョンを使えばいいのですか?
A. IE9以上であれば、jQuery 3.0を使用してください。
IE8以下にも対応するならば、jQuery 1.12を使用してください。

補足

jQuery 1.9 までは一系統しかなく、古いブラウザも含めて全て対応していました。
その後、古いブラウザを切り捨てるためにバージョンを分岐させました。
古いブラウザにも対応した1系(1.10、1.11、12)と
古いブラウザを切り捨てた2系(2.0, 2.1, 2.2)です。

1系と2系は対応ブラウザの違いだけで機能は全く一緒です。
機能が同じなのにメジャーバージョンが違っているのが分かりにくい
ということでバージョン番号の付け方を変えることになり、
新たに古いブラウザを切り捨てたjQuery 3.0、そして古いブラウザにも対応した
jQuery Compat 3.0がリリースされる予定でした。

しかしマイクロソフトが古いIEのサポートポリシーを変更し
サポート中であるOSで動く、最新のIEしかサポートしなくなったために、
2016年1月でVista上のIE8のサポートが終了しました。

そのため予定されていたjQuery Compat 3.0がなくなり、
jQueryは3.0に一本化されました。
0004Name_Not_Found
垢版 |
2016/11/01(火) 21:19:28.52ID:???
jQuery 3.0正式版がついにリリース。通常版のほかに、Ajax機能を省略したスリムビルド版も提供
http://www.publickey1.jp/blog/16/jquery_30ajax.html


2006年1月にjQueryが初めて世の中に登場してから10周年となる今年。jQuery 3.0の正式版が登場しました。

jQuery 3.0 Final Released! | Official jQuery Blog
これまでjQueryは、、モダンブラウザのみをサポートすることで軽量化と安定化をはかった
「jQuery 2.x」系と、Internet Explorer 8以前を含む古いバージョンのブラウザまで
サポートする互換性重視の「jQuery 1.x」系の2系統が存在しました。

また、フル機能のjQuery 3.0のほかに、Ajaxの機能を省略して軽量化したスリムビルド版のjQuery 3.0の提供が行われます。

Along with the regular version of jQuery that includes the ajax and effects modules, we’re releasing a “slim” version that excludes these modules.

通常バージョンとしてAjaxやエフェクトモジュールなどを含んだjQueryと同時に、これらを外した“スリム”バージョンも提供する。
最近のWebアプリケーションではjQueryのAjaxを使うことは少なくなったと思われますので、スリム版のjQueryで十分だという開発者も多いでしょう。
圧縮後のサイズは通常版が30kbなのに対し、スリム版は23.6kb。
0005Name_Not_Found
垢版 |
2016/11/04(金) 18:36:31.36ID:???
それども23.6KBも必要なのな
もっと削れるんじゃない?
0007Name_Not_Found
垢版 |
2016/11/21(月) 22:53:25.96ID:OQ9gQCwm
性能を決める関数で for-in を使うのはやめよう

for-in にも使い道はあるものの, for を使うべき場面でよく誤って使われている. for-in で列挙をする前に,
スクリプトエンジンは列挙可能なプロパティのリストを作って重複を弾かなければいけない.

スクリプト側が列挙するプロパティを知っていることはよくある. こうしたプロパティをなめるならふつうの for 文が使える.
配列や, 配列風のプロパティを持つオブジェクト (DOM の NodeList? など) のように, 連番の数字なら特にそうだ.

for-in 誤用の例を以下に示す:

var oSum = 0;
for( var i in oArray ) {
oSum += oArray[i];
}

for を使う方が効率的になる:

var oSum = 0;
var oLength = oArray.length;
for( var i = 0; i < oLength; i++ ) {
oSum += oArray[i];
}
0008Name_Not_Found
垢版 |
2016/11/21(月) 22:55:25.97ID:???
>>7
それをやるならfor-ofを使うべきだろ
0009Name_Not_Found
垢版 |
2016/11/21(月) 22:58:57.98ID:???
var sum = 0;
var array = [1, 3, 4, 7];
for (let value of array) {
  sum += value;
}

ついでに言うならば、sumはこう書いたほうが良い。
const sum = array.reduce((a, b) => a + b);

変数への再代入がない所に注目な
0010Name_Not_Found
垢版 |
2016/11/22(火) 01:04:41.27ID:???
誘導。

■JavaScriptスレ
JavaScript の質問用スレッド vol.131
http://echo.2ch.net/test/read.cgi/hp/1478053599/
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.5
http://echo.2ch.net/test/read.cgi/hp/1465399470/
jQuery 質問スレッド vol.7
http://echo.2ch.net/test/read.cgi/hp/1478055094/
0011Name_Not_Found
垢版 |
2016/11/24(木) 17:51:17.71ID:???
clientのJSからサーバーにデータをajaxでPOSTして
サーバーでそのデータを加工して加工結果を新しいページに表示したいのです。
ajaxでPOSTしてデータを加工するところまでは出来たのですが、ajaxなので
そのデータはクライアントのsucessに戻りますよね
このあとどうすればいいのか分かりません。
あるいはもっと良い方法がありますか?
0012Name_Not_Found
垢版 |
2016/11/24(木) 18:06:31.81ID:???
誘導。

■JavaScriptスレ
JavaScript の質問用スレッド vol.131
http://echo.2ch.net/test/read.cgi/hp/1478053599/
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.5
http://echo.2ch.net/test/read.cgi/hp/1465399470/
jQuery 質問スレッド vol.7
http://echo.2ch.net/test/read.cgi/hp/1478055094/
0013Name_Not_Found
垢版 |
2016/11/24(木) 21:30:51.15ID:???
>>11
そのsuccessで戻ってきたJSONなりから
画面を作ればいいだけでは?

面倒ならテンプレートエンジンでも調べてみると良い。
0014Name_Not_Found
垢版 |
2016/11/25(金) 05:19:05.92ID:???
>>13
>画面を作ればいいだけでは?
戻って来たJSONは数百キロバイト以上のHTMLデータで、
そのデータを使って新しいページを作る方法が分かりません。
urlのパラメータではそんな大きなデータを渡せないですよね?
0015Name_Not_Found
垢版 |
2016/11/25(金) 05:59:57.76ID:???
>>15
HTMLで受け取ってるならそれをDOMの任意の場所にappendするだけで済みそうだが
なんでそれをもう一度サーバに渡そうとしてるの?
(それにしたって数百キロ程度のデータを渡せないなんてことないが)

jsやjQueryによるDOM操作についてググる必要がありそう
0016Name_Not_Found
垢版 |
2016/11/25(金) 06:04:43.13ID:???
WEB+DB vol.94 では、Electronで開発しているけど、使っているのは、

Electron(Node.js + Chromium)
UIのパーツを作る、React
CSSフレームワークには、Photon
0017Name_Not_Found
垢版 |
2016/11/25(金) 07:56:12.72ID:???
>>15
今表示しているページではなくて、
別のページに移動してそのデータを表示したいのです。
0018Name_Not_Found
垢版 |
2016/11/25(金) 16:56:12.65ID:???
>>17
その別ページには他者もアクセスできるようにしたいのか?
それとも、当の利用者専用なのか?

後者なら、サーバ側で加工する必要はなさそうだが(
データを blob URL化してナビゲートしたり、ブラウザは限られるが SharedWorker を使う方法も考えられる
複数セッションにわたって残したければ localStorage に保存するだけで済むかもしれない)
0019Name_Not_Found
垢版 |
2016/11/25(金) 19:49:57.44ID:???
>>18
説明不足でした。
AJAXで戻って来たデータを表示する時に、現在のページはそのまま
残しておいて、新規に別ページを開いてそこに表示したいのです。
専用ページとかではなくて誰でもアクセスできるページです。
教えて頂いた方法を調べてみます。
0020Name_Not_Found
垢版 |
2016/11/27(日) 09:33:02.68ID:Er3ITcxf
HTML/JavaScriptのiframeタグについてご教授下さい。

■実施したい事
iframeでhtmlを取得したいが、
取得したhtmlの中身(cssや画像)は取得させたくない。
0021Name_Not_Found
垢版 |
2016/11/27(日) 09:33:16.25ID:Er3ITcxf
>>20
■詳細イメージ
@
<iframe src="http://xxxx/sample.html"></iframe>

A
WEBブラウザがhttp://xxxx/sample.htmlへGETリクエストを投げて、
レスポンスが返ってくる

B
WEBブラウザが返ってきたレスポンスをDOMツリーにロードする

C
WEBブラウザがhttp://xxxx/sample.htmlに記載されているcssや画像を取得する

@Aは実施させて、
Bの前後で処理を中断させて、
Cを実施させたくない。
0022Name_Not_Found
垢版 |
2016/11/27(日) 09:33:42.78ID:Er3ITcxf
>>20
>>21
■質問事項
上記を実現させるためにはどのようなHTML/JavaScriptの実装が必要でしょうか?
ご教授下さい。

■思うところ
Bのタイミングでイベントを発生させて、
Cを無効にするような処理が可能かな?と調べてみましたら、
「DOMContentLoaded」というDOM読み込み完了後に呼ばれるイベントがあったのですが、
うまく使えますでしょうか。

また、<xmp>タグ等を動的に発行して、
取得したhtmlを無効に出来るかな?と思っています、
うまく使えますでしょうか。

また、ブラウザで発生するHTTPリクエストを全てキャッチして、
http://xxxx/sample.htmlに記載されているcssや画像のHTTPリクエストを遮断できないかな?と思っています、いかがでしょうか。

その他、手段は問いません。
実現できる方法をヒントだけでも良いのでご教授下さい。
0023Name_Not_Found
垢版 |
2016/11/27(日) 12:38:25.68ID:???
<div>あああ<input type="text" />いいい</br>ううう</div>
こういう場合、

jQueryで
var input = $('div > input[type="text"]');
を取得したとして、その後ろにある文字
いいい
を取得する方法はありますか?
0025Name_Not_Found
垢版 |
2016/11/27(日) 12:54:49.23ID:???
>>20
普通にAjaxで中身だけを取得すればいいだけ
0027Name_Not_Found
垢版 |
2016/11/27(日) 13:58:37.10ID:???
正規表現なら楽勝だけど、他になにかあるんかね
0028Name_Not_Found
垢版 |
2016/11/27(日) 20:38:00.28ID:???
>>23
はい
var input = $('div > input[type="text"]');
var nextText = input.get(0).nextSibling.textContent; // いいい

nextSiblingを取得すると次にあるノード(要素/テキスト/コメント などなんでも)が取得できるから、これを利用するといい。
jQueryはテキストノードの扱いにはあまり向いていないので、標準のDOMを使わざるを得ない。
0029Name_Not_Found
垢版 |
2016/11/28(月) 05:16:18.82ID:???
>>20-22
2のGETで、取得しないファイルの拡張子を、指定できないの?

Aなど、丸囲み文字は、Windowsだけの環境依存文字だから、使うな

>>23-28
「いいい</br>ううう」の部分だろ。
素直に、<div>の内容を取得すれば?

「いいい」1行だけと言うのは、おかしいだろ
0030Name_Not_Found
垢版 |
2016/11/29(火) 00:04:00.21ID:OhNqSe55
>>29
2のGETってブラウザが自動的に行ってるものなんですが、
ブラックリストの拡張子って指定できるんですか?
具体的にどうやってやるのでしょうか?
0031Name_Not_Found
垢版 |
2016/11/29(火) 07:36:46.02ID:???
マルチポストは禁止!

他のスレに、返事をしておいた
0032Name_Not_Found
垢版 |
2016/11/29(火) 10:04:15.45ID:???
誘導。

■JavaScriptスレ
JavaScript の質問用スレッド vol.131
http://echo.2ch.net/test/read.cgi/hp/1478053599/
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.5
http://echo.2ch.net/test/read.cgi/hp/1465399470/
jQuery 質問スレッド vol.7
http://echo.2ch.net/test/read.cgi/hp/1478055094/
0033Name_Not_Found
垢版 |
2016/12/01(木) 21:46:12.93ID:???
$('div[id="XXXXX"]')
$('div[id=XXXXX]')
ダブルクオーテーションで囲っても囲わなくても動くのですが、
どちらでも良いのでしょうか?
0034Name_Not_Found
垢版 |
2016/12/01(木) 22:09:56.64ID:???
>>33
囲まなくて動くからどっちでもいいよ。
!とか$みたいな半角の記号を含むidだと囲む必要があるから、その時だけ囲めばok。

補足だけど、idで選択する時は普通は
$('div#XXXXX')
あるいは
$('#XXXXX')
と書くのが一般的。
0035Name_Not_Found
垢版 |
2016/12/03(土) 15:16:05.13ID:6IkFDzpo
俺は特定のタグすべてを対象としないのであれば
ほとんどタグ名を書かないかな。
0036Name_Not_Found
垢版 |
2016/12/11(日) 11:23:29.68ID:Tn2z+E9L
【質問】JSのDOMContentLoadedが発火しません。

■事象
iframeを動的に作成(createElement)して、
addEventListenerに「DOMContentLoaded」を追加しているが、
iframeのsrc先のDOM読み込み完了時にイベントが発生しません。
0037Name_Not_Found
垢版 |
2016/12/11(日) 11:24:51.51ID:Tn2z+E9L
■コーディング
var parent_obj = document.getElementById("top");
var obj = document.createElement('iframe');

if(obj.addEventListener){
obj.addEventListener("DOMContentLoaded",xxx);//★これが発火しない
//obj.addEventListener("load",xxx);//☆遅い
}else if(obj.attachEvent){
obj.attachEvent("onload",xxx);
}else{
obj.onload = xxx;
}

parent_obj.appendChild(obj);
obj.src = "URL";

function xxx(e){
alert("発火");★これが発火しない
}
0038Name_Not_Found
垢版 |
2016/12/11(日) 11:25:25.49ID:Tn2z+E9L
>>36
>>37
■やりたい事
addEventListener("load",xxx)だと画像読み込み後にイベントが発生するので、遅いです。
iframeのソースが返ってきた直後にイベントを呼びたいのです。

■質問
なぜDOMContentLoadedが発火しないのでしょうか。
コーディングが悪いのでしょうか?

それともcreateElement('iframe')はDOMContentLoadedのイベントに対応していないのでしょうか?
その場合、上記【やりたい事】の代案はございますでしょうか?
0039Name_Not_Found
垢版 |
2016/12/11(日) 12:53:46.83ID:???
>>38
HTMLIFrameElementにはcontentWindowおよびcontentDocumentというプロパティが存在しますので、そちらのイベントを拾えばよいのではないでしょうか。

obj.contentDocument.addEventListener("DOMContentLoaded",xxx);

引用元
http://ja.stackoverflow.com/questions/31078/
0040Name_Not_Found
垢版 |
2016/12/11(日) 13:42:55.39ID:???
if(obj.addEventListener){
}else if(obj.attachEvent){


いまどきこんなコード書くなよ。
古いブラウザ切り捨てでいいならaddEventListener使えばいいし、
IE8とかにも対応させるならjQueryを使うべきだ。
コードを自分で書いたならばその行をテストしなきゃいけないんだぜ?
0041Name_Not_Found
垢版 |
2016/12/11(日) 15:57:02.71ID:???
> HTMLIFrameElementにはcontentWindowおよびcontentDocumentというプロパティが存在しますので

マジレスするとコレでは無理。

なぜならiframeの中のwindow(さらにその中のdocument)に触れるとは限らないから
触れると確定するのはiframeのsrcが設定された後。同じドメインであるなど
参照する権限があれば触れる。だから先にsrcを設定する必要がある。

だがsrcを設定した時点で読み込みが始まる。
つまり読み込みが始まった後にDOMContentLoadedをaddEventListenerしても
もう読み込まれてしまっているかもしれない。この場合は発火しない。

最初の一回はネットワークから取ってくるので処理が遅く、
addEventListenerが間に合って発火するかもしれないが
二回目以降はキャッシュがつかわれるため発火しない(ことがある)
この解決策を俺は知っているが、レスは返ってこなさそうだし
ここまでだなw
004241
垢版 |
2016/12/11(日) 15:58:35.69ID:???
マルチポスト先を見てもどうやらこの問題に触れているのはなさそうだなw
こういうのは経験が物を言う。やったことがある俺じゃないと気づきにくい
0043Name_Not_Found
垢版 |
2016/12/11(日) 16:16:24.89ID:???
俺は質問者ではないんだけど、同ドメインだとしても、src設定した直後にcontentWindowって触れないよな?
0044Name_Not_Found
垢版 |
2016/12/11(日) 16:27:39.55ID:???
そうだったかな?こまないところは忘れた。
作り方によると思う。古いブラウザ対応もあって
about:blankも併用していたからな。
0045Name_Not_Found
垢版 |
2016/12/11(日) 16:35:29.40ID:???
あ、ごめん確かに作り方によるわ
質問のコードをそのまま使うとアクセスできないだけだった
0046Name_Not_Found
垢版 |
2016/12/11(日) 21:01:53.10ID:Tn2z+E9L
>>39

クロスオリジン、クロスドメインがやりたい事の前提です。
その場合、DOM系のイベントが使えないのですね。
それでは上記【やりたい事】の代案はございますでしょうか?
0047Name_Not_Found
垢版 |
2016/12/11(日) 21:04:32.54ID:Tn2z+E9L
>>41

丁寧なご回答ありがとうございます。

クロスオリジン、クロスドメインがやりたい事の前提です。
その場合、DOM系のイベントが使えないみたいののです。
>>41 さんのご指摘のタイミングの問題もあります。
それでは上記【やりたい事】の代案はございますでしょうか?

一応「2秒待って」という苦肉の策はありましたが、
別の綺麗な順序保障の方法はないでしょうか?
0048Name_Not_Found
垢版 |
2016/12/11(日) 21:05:52.83ID:Tn2z+E9L
>>43-45

>>41

丁寧なご回答ありがとうございます。

クロスオリジン、クロスドメインがやりたい事の前提です。
その場合、DOM系のイベントが使えないみたいののです。
それでは上記【やりたい事】の代案はございますでしょうか?

一応「2秒待って」という苦肉の策はありましたが、
別の綺麗な順序保障の方法はないでしょうか?
0049Name_Not_Found
垢版 |
2016/12/11(日) 21:06:42.72ID:Tn2z+E9L
あ、元々の質問は以下です。
>>36-38
0050Name_Not_Found
垢版 |
2016/12/11(日) 21:21:56.81ID:???
クロスドメイン先は自分で管理してるものなの?
0052Name_Not_Found
垢版 |
2016/12/11(日) 22:43:26.63ID:???
1. image = new Image();
2. image.src = 何々
3. image.onload = ハンドラ

便乗して質問するが、
こう書いておいたら、画像を読み込んだ後に、ハンドラが確実に呼ばれるのか?
それとも、もし画像を読み込むのが速ければ、もうハンドラは呼ばれないのか?

確か、画像の読み込みは、非同期だよね。
読み込みしながら同時に、3行目も実行されるよね?
0053Name_Not_Found
垢版 |
2016/12/11(日) 23:55:19.70ID:???
>>52
onloadよりも先に画像が読み込まれれば、onloadは発生しない。
ただこの場合は単に2と3を逆にすればいい。
iframeが特殊なだけ
0054Name_Not_Found
垢版 |
2016/12/12(月) 00:57:04.81ID:???
>>52
>読み込みしながら同時に、3行目も実行されるよね?

1, 2, 3 を同期的に実行すればハンドラは必ず呼ばれるだろう
キャッシュされていようが image 読み込みは非同期になるので
0055Name_Not_Found
垢版 |
2016/12/12(月) 01:18:50.95ID:???
> 1, 2, 3 を同期的に実行すれば

その方法を書きなさい。出来ないこと言っても意味がない
レスを投稿する


ニューススポーツなんでも実況