質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

3790閲覧

jQueryのeachを使用した時にresizeが効きません。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/04/06 04:39

編集2016/04/06 05:21

【目的】
各pタグ毎に効かせたいのでeachを使っています。
・ウィンドウサイズが640より大きければprependToを使い、小さければapendToを使いたいです。
・ロード時、リサイズ時、どちらも対応したいです。

【背景】
・wordpressから出力された時にpタグがdivに内包される仕様があり、そのdivの次のimg要素をdivの中に入れてやる必要がありました。ブラウザ上のリサイズ時にもリアルタイムで反映させたいのです。

現在下記のようなソースにしています。

javascript

1 2var windowSize = window.innerWidth; 3var switchPoint = 640; 4 5$(window).on('load resize',function(){ 6 7$('#content p').each(function(i){ 8 if(windowSize > switchPoint){ 9 $(this).parent('div').next('img').prependTo($(this).parent('div')); 10 }else{ 11 $(this).parent('div').next('img').apendTo($(this).parent('div')); 12 } 13}); 14 15}); 16

each無しであれば正常に動くのですが、eachを使うとうまく動いてくれません。

よろしくお願いいたしますm(__)m

【①追記】

情報不足で申し訳ございません!

HTMLは下記のように変化してほしく思います。

通常

html

1<div id="content"> 2 3<div> 4 <p></p> 5</div> 6<img src=""> 7 8</div>

ウィンドウサイズが640px以上の場合

pを内包しているdivの次のimg要素をpの前に移動。

html

1 2<div id="content"> 3 4<div> 5 <img src=""> 6 <p></p> 7</div> 8 9</div>

ウィンドウサイズが640px以下の場合

pを内包しているdivの次のimg要素をpの後に移動。

html

1<div id="content"> 2 3<div> 4 <p></p> 5 <img src=""> 6</div> 7 8</div>

尚、コンソールエラーは確認してみたところありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/04/06 04:50

「うまく動いてくれません」とありますが、どうあって欲しいものが、どのようになっていて、コンソールにエラーなどが出ているかどうかなど詳細にお願いします。
think49

2016/04/06 05:15

「通常」のHTMLはjs-off時の場合を意図した必要なマークアップでしょうか。ほとんどの環境で640px以上でしょうから初めから640pxの場合でマークアップしておけば良いと思いました。js-off時だけHTMLをスイッチしたいならわかりますが…。それから、"#newsImgTarget p"を表すHTMLがありません。
退会済みユーザー

退会済みユーザー

2016/04/06 05:25

ありがとうございます。 色々情報不足で申し訳ございません>< 「通常」のソースはwordpressで吐き出された時にあのような形になることがあり、はじめからマークアップするというのが難しいです。 リサイズはPCブラウザを縮めた時にもリアルタイムで反映させたいです。 HTMLの#contentを追加しました。コンテンツすべてを囲むタグです。newsImgTarget という名前は変更しました。
guest

回答2

0

示されているコードでは、たとえeachがなくても、windowSizeが更新されないためうまく動作しないと思いますが・・・
あまり変わりがないかもしれませんが、以下でどうですか?

javascript

1var switchPoint = 640; 2 3$(window).on('load resize',function(){ 4 var windowSize = window.innerWidth; 5 6 $('#newsImgTarget p').each(function(i, e){ 7 if(windowSize > switchPoint){ 8 $(e).next('img').prependTo($(e).parent('div')); 9 }else{ 10 $(e).next('img').apendTo($(e).parent('div')); 11 } 12 }); 13});

投稿2016/04/06 04:51

orange0190

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/06 05:02

ご回答ありがとうございます。 上記のコード、試してみます!
guest

0

ベストアンサー

HTMLが欲しいところですが、windowSize が固定なので resize しても動作が変わっていないようですね。

JavaScript

1jQuery(window).on('load resize',function () { 2 var windowSize = window.innerWidth; 3 var switchPoint = 640; 4 5 jQuery('#newsImgTarget p').each(function (i) { 6 if (windowSize > switchPoint) { 7 $(this).next('img').prependTo($(this).parent('div')); 8 }else{ 9 $(this).next('img').apendTo($(this).parent('div')); 10 } 11 }); 12});

Re: palus さん

投稿2016/04/06 04:49

think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/06 05:02

ご回答ありがとうございます。 依頼文を修正いたしましたので、もしよろしければご覧くださいませ。 windowサイズを可変させる必要があるんですね?><;
think49

2016/04/07 04:48

HTMLを拝見しました。 基本的にはWordPressで理想となるHTMLを出力し、メディアクエリ+floatで要素位置を入れ替えるのが妥当だと思います。 何らかの事情でそれが難しいのであれば、下記のようにJavaScriptを組みます。 1. 通常のHTMLからdiv要素内にimg要素ノードを挿入 2. resize で要素位置を入れ替える 現在の構成か通常かそうでないかで処理が変わってくるので「1. -> 2.」の順番は保証する必要があります。 script要素を当該要素より後に配置できるのなら1.を即実行して2.をイベント定義すれば良いでしょう。 それが無理なら DOMContentLoaded, resize に 1. の処理を入れて一回でも実行したら .off() して 2. を .on() して下さい。
退会済みユーザー

退会済みユーザー

2016/04/07 07:52

詳しい流れを書いて頂きありがとうございます!>< ようやくイメージがつかめてきました^^; 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問