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

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
702 : Name_Not - 2018/11/02(金) 11:56:52.88 ID:???.net (+51,+29,-15)
>>701
難しいかどうかはその人のスキルによるとしか。。。
703 : Name_Not - 2018/11/02(金) 13:12:13.08 ID:???.net (+0,-28,-48)
困難かという意味ではそうでもないかも
parentNodeのChildNodesを、その要素以降順に見ていくだけだから
ていうか、jQueryだってJSで書かれているわけだしね
704 : Name_Not - 2018/11/02(金) 14:27:31.10 ID:???.net (-6,-29,+0)
nextSibling
705 : Name_Not - 2018/11/02(金) 14:57:52.92 ID:???.net (+3,-29,-101)
質問を変えて、jQueryの.nextUntil()をDOM API以外のライブラリを使わずに
10行以内(セミコロン不使用、横80文字まで、普段やらない書き方を使うのなし)で
作れるでしょうか?だったらどう?
706 : Name_Not - 2018/11/02(金) 15:08:06.56 ID:???.net (+3,-29,-43)
まず親要素のquerySelectorAllで
セレクタにマッチする小要素を全部取り出しておく

目的の要素のnextSiblingが、上のマッチした要素群に含まれれば当たり
なければ次のnextSiblingを見る

なんとか80字でいけるか?
707 : Name_Not - 2018/11/02(金) 15:22:12.61 ID:???.net (+57,+29,-18)
全部取り出しておいてfilterしてもいいし、
ただ単に次の要素を見ていくだけのイテレータでもいい
5行くらいの関数で書けるんじゃない?
708 : Name_Not - 2018/11/02(金) 16:49:57.19 ID:???.net (+61,-30,-124)
function nextUntil(el, selector){
const result = [];
while(el = el.nextElementSibling){
if(selector && el.matches(selector)){
break;
}
result.push(el);
}
return result;
}

こんな感じか。matchesはIEで動かんからポリフィルを追加して
http://developer.mozilla.org/ja/docs/Web/API/Element/matches
709 : Name_Not - 2018/11/02(金) 18:30:13.65 ID:???.net (+0,-28,+1)
はー
matchesなんてあったんだな
勉強になる
710 : Name_Not - 2018/11/02(金) 20:12:43.52 ID:???.net (+42,+24,-12)
及川光秀
711 : Name_Not - 2018/11/03(土) 07:10:10.07 ID:???.net (+91,-30,-42)
function * nextUntil ( el, sel ) {
while ( el = el.nextElementSibling && ! el.matches( sel) )yield el
}
712 : Name_Not - 2018/11/03(土) 22:22:33.52 ID:6Ec8PRLb.net (+64,+29,-18)
>>708
上手く行きました。
凄いですね、こんなのを書けるなんて。
>>711
私にはレベルが高すぎて付いて行けません。
結果の取り出し方を教えて下さい。
713 : Name_Not - 2018/11/03(土) 22:44:24.52 ID:???.net (+61,+26,-14)
>>711は単なる技術マウントだから無視してよい。
715 : Name_Not - 2018/11/04(日) 03:23:50.49 ID:???.net (+57,+29,-9)
技術マウントだからと言って無視するか、
技術を勉強するか

どちらを取るかね?
716 : Name_Not - 2018/11/04(日) 04:32:09.76 ID:???.net (+42,+29,-132)
>>712
>>711は代入演算子と論理積演算子の優先順位を間違えているから結果がバグっている。
修正してオプションのfilter足してjqueryのnextUntilの
http://js.studio-kingdom.com/jquery/traversing/next_until
のデモと同じことする使い方を
http://codepen.io/anon/pen/VVwdQB
に上げた。
しかし結果を配列でまとめて取り出す使い方しかしないなら
http://codepen.io/anon/pen/YRzvWa
みたいになりわざわざジェネレータ使う意味ないしこんなことするなら>>708のほうがいいな。
717 : Name_Not - 2018/11/04(日) 06:28:04.76 ID:???.net (+45,+22,-16)
一番いいのはjQueryを使うこと
719 : Name_Not - 2018/11/04(日) 10:14:41.54 ID:???.net (+42,+24,+0)
いいよ
724 : Name_Not - 2018/11/04(日) 13:15:33.79 ID:???.net (-1,-29,-16)
CやC+に一切変更ができないconstなんかありません
725 : Name_Not - 2018/11/04(日) 13:18:38.69 ID:???.net (+7,-30,-55)
chromeだけど、dataスキームで新しいタグ開いてhtmlを表示させたいんだけど
data:text/html;云々をwindow.openするとabout:blankになってしまうたすけて
(data:text/html;云々を直接urlボックスにいれて移動、は表示される)
726 : Name_Not - 2018/11/04(日) 14:00:44.03 ID:???.net (+5,-29,-17)
>>725
再現コードをjsfiddleへUP
727 : Name_Not - 2018/11/04(日) 14:11:19.81 ID:???.net (+49,+28,-8)
>>723
一切変更出来ないとは?
変更不可対象を明確にしろ
728 : Name_Not - 2018/11/04(日) 14:36:36.33 ID:???.net (+57,+29,-31)
constは名前に対して働くもので値に対して働くものではない
729 : Name_Not - 2018/11/04(日) 15:24:02.74 ID:???.net (+36,-30,-83)
>>723
そもそもがcのconst勘違いしてないか。
プリミディブ値ならjsのconstでも同じように使えるし、
cではjsのconst OBJ = {a: 1, b: {c: 2}};みたいにオブジェクト直接入れるみたいなことはそもそも出来ない。
ポインタ使うにしたってOBJ.aやOBJ.b.cなどメンバーを書き換えられてしまうことは同じ。

まあやりたいことは分かる…気がする…
以下にdeepFreezeの実装例出てるから参考にしてみたら?
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

こういうことでしょ?違う?
http://codepen.io/anon/pen/EQxJKB
730 : Name_Not - 2018/11/04(日) 15:24:32.56 ID:???.net (+3,-30,-154)
>>726
いろんなサイトでconsole開いて実行したので、jsfiddleのコードに書いて実行してしまうと若干挙動が違う気がするので
具体的には
window.open('data:text/html;charset=utf-8,'+encodeURIComponent('<!DOCTYPE html><html lang="en"><body>hoge</body></html>'));
を適当なサイトでコンソール開いて実行
一応jsfiddleでもやってみたけどポップアップ禁止みたいなのが出てきた
http://jsfiddle.net/pLdojb9w/
ポップアップ許可するとabout:blank
731 : Name_Not - 2018/11/04(日) 15:29:06.49 ID:???.net (+20,-9,+4)
732 : 729 - 2018/11/04(日) 15:31:07.23 ID:???.net (+3,-30,-119)
ちなみに用途としては
とあるサイトの画像urlだけをスクレイピングして
htmlで新しいタブに<img src=>みたいに単純表示したいだけ
今までconsoleで<img src="">を出力してコピペ→テキストエディタでhtmlで新規保存
ブラウザで開いてウェブ丸ごと保存ってやってたのでめんどくさくなった
(別のスクリプトやアプリで画像urlだけ抽出してダウンロードしたらいいのではと思うし
都合が良いところはそれでやってるけど)
733 : 729 - 2018/11/04(日) 15:39:44.04 ID:???.net (-1,-29,-26)
あと、document.writeで上書き版もしたけど
ajaxでページロードしてる感じのとこだと続きの画像表示したいときに不便だった
734 : Name_Not - 2018/11/04(日) 17:21:46.38 ID:???.net (+66,-30,-122)
dataURI直で新規タブ開いて中身反映されないのはセキュリティ理由によるもの
blob→objectURL化が必要
const blob = new Blob([ '<!DOCTYPE html><html lang="en"><body>hoge</body></html>' ], { type: 'text/html' });
const url = URL.createObjectURL(blob);
window.open(url);
735 : 729 - 2018/11/04(日) 17:45:38.91 ID:???.net (+62,+29,-30)
>>734
で、できたー!
画像も問題なく表示され
ありがとうございました
736 : Name_Not - 2018/11/04(日) 18:43:51.03 ID:plxWY2l1.net (+18,+29,-33)
>>729
解説ありがとうございました。
JSのオブジェクトの挙動が理解出来ました。
値は変更出来ないけれど、メンバを変更する事は
出来るんですね。
737 : Name_Not - 2018/11/04(日) 19:09:43.38 ID:???.net (+57,+25,+0)
>>734
勉強になった
738 : Name_Not - 2018/11/04(日) 21:50:56.98 ID:???.net (+3,-30,-141)
漏れは、Ruby で、selenium webdriver, Nokogiri を使って、
5ch の書き込み内から、画像リンクだけを取り出して、
Nokogiri で、img タグを構築して、そのsrc 属性に設定して表示している

ブラウザに、5ch のスレを表示して、結果はそれとは異なる、新しいタブに表示している

driver.execute_script "window.open()" # 新しいタブを開く
driver.switch_to.window ( driver.window_handles.last ) # 新しいタブへ移動する

ERB みたいな、HTML 内にRuby プログラムを書ける、
埋め込みテンプレートを使えば、もっと簡単にできるのだろうけど
739 : Name_Not - 2018/11/04(日) 21:56:18.15 ID:???.net (+65,+29,-64)
jsならコンソールやブックマークレットでできることをそんな大がかりにしてバカみたい。
で、何をやってるかと思えばjs呼び出してるだけwww
そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
740 : Name_Not - 2018/11/04(日) 22:02:25.28 ID:???.net (+37,-29,-56)
>>739
> そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww

いつの時代の話してるんだよwww

Ruby2.0はChromeブラウザでネイティブに動くようになりそう
http://hoshi.air-nifty.com/diary/2012/05/ruby20chrome-d6.html
741 : Name_Not - 2018/11/04(日) 22:06:31.07 ID:???.net (+55,+27,-13)
>>740
皮肉キツいぜwwwww
742 : Name_Not - 2018/11/05(月) 03:11:29.05 ID:???.net (-1,-29,-25)
echo.jsより容量小さい画像遅延読み込みのスクリプトってあんの?
743 : Name_Not - 2018/11/05(月) 06:26:31.41 ID:???.net (+60,+29,-13)
>>736
変数名と紐付いている値を更新することはできないというだけ
その値自体にはなんの制約もない
744 : Name_Not - 2018/11/05(月) 06:57:00.55 ID:???.net (+11,-16,-65)
RubyみたいなポンコツエンジンをNative Clientで走らせるとか愚の骨頂の考えだった
WasmにコンパイルしてJSエンジン上で走らせる方がよっぽどパフォーマンス出る可能性がある
745 : Name_Not - 2018/11/06(火) 22:07:50.79 ID:G7U6fKUW.net (-28,-30,-56)
jQueryだと
$(window).on('resize', data, func);
のようにdataを与える事が出来ますよね。
それを
window.addEventListener('resize', data, func);
とは出来ませんが、どうやれば同じようにdataをfuncにパス出来ますか?
746 : Name_Not - 2018/11/06(火) 22:26:04.96 ID:???.net (+28,+19,-2)
クロージャで
747 : Name_Not - 2018/11/06(火) 22:36:13.12 ID:G7U6fKUW.net (+10,+22,-38)
>>746
レスありがとうございました。
>クロージャで
なるほど。
では、jQueryの場合、スコープが異なるfuncになぜデータを渡せるんですか?
748 : Name_Not - 2018/11/06(火) 22:54:14.02 ID:???.net (+58,+29,-2)
>>747
内部的にクロージャーを使っているから
749 : Name_Not - 2018/11/06(火) 22:56:17.72 ID:???.net (+80,-30,-60)
えっ、なにが疑問なのかよく分かんない…

function chinko(data) {
return 'I love ' + data;
}

function manko(func, data) {
if (!data) data = func.name;
console.log(func(data));
}

let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko"
750 : Name_Not - 2018/11/06(火) 23:02:33.42 ID:???.net (+96,+29,-32)
>>749
> えっ、なにが疑問なのかよく分かんない…

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

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


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