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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

1回答

362閲覧

特定のクラス名のhtmlの順番を変えたいのだが先頭の要素にしか処理が走らない

maturyo

総合スコア7

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

0グッド

0クリップ

投稿2020/04/30 07:00

編集2020/04/30 08:14

javascript初心者です宜しくお願い致します。
インデントをしたのですが、プレビューで反映されていなく、見づらく申し訳ございません。

html

1<div id = "id-1"> 2 <div class="left-img"> 3 <img src = "sample.com"> 4 </div> 5 6 <div class = "right-tag"> 7 <div class="tag"> 8 <a class = "class-2">クラス2</a> 9 <a class = "class-1">クラス1</a> 10 </div> 11 12 <div class="tag"> 13 <a class = "class-2">クラス2</a> 14 <a class = "class-3">クラス3</a> 15 </div> 16 17 <div class="tag"> 18 <a class = "class-2">クラス2</a> 19 <a class = "class-1">クラス1</a> 20 </div> 21 22 </div> 23</div>

特定のクラス名を持っているhtmlの順番を変えたくて以下のような記述をしました。

javascript

1var child = document.getElementById('id-1').getElementByClassName('class-1'); 2var parent = $(child).parent(); 3 4if($(child).hasClass('class-1')){ 5 var first = $(parent).child().eq(0).prop('outerHTML'); 6 var second = $(parent).child().eq(1).prop('outerHTML'); 7 $(parent).eq(0).html(second+first); 8}

すべての[class-1]をクラス名にもつ要素に処理を適応させたいのですが、この記述だと、先頭の[class-1]をクラス名に持つ、htmlにしか処理が適応されませんでした。
そこでeachメソッドを使ってすべての要素に、処理を適応させようとしたところ、処理が走らなくなってしまいました。

javascript

1var child = document.getElementById('id-1').getElementByClassName('class-1'); 2var parent = $(child).parent(); 3 4$(parent).each(function(){ 5 if($(child).hasClass('class-1')){ 6 var first = $(parent).child().eq(0).prop('outerHTML'); 7 var second = $(parent).child().eq(1).prop('outerHTML'); 8 $(parent).eq(0).html(second+first); 9 } 10});

調べたのですが、原因がわかりません。
コンソールにエラーはでていませんでした。
どなたかご教授いただければ幸いです。

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

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

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

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

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

kei344

2020/04/30 07:48

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
maturyo

2020/04/30 07:56

大変失礼いたしました。 挿入させていただきました。 教えていただきありがとうございます。
kei344

2020/04/30 08:05

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。後から見た人から見て、現在の回答が「無いコードに対しての指摘」になり、意味がわからなくなります。
maturyo

2020/04/30 08:12

かしこまりました。 以後気を付けます。 ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

そもそも提示のコードではdocumentGetElementByIdが定義されていません。ブラウザのJavaScriptであれば、document.getElementByIdがありますがそれの書き間違いでしょうか。

【Document.getElementById() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById

あと、jQueryで処理するならgetElementById等ではなくjQueryで処理すればよいのでは。

js

1$( '#id-1 .class-1.target' ).each( function() { 2 // 中身の処理はparent以外提示されたもののまま(HTMLも目的も提示が無いので) 3 var first = $( this ).parent().child().eq(0).prop('outerHTML'); 4 var second = $( this ).parent().child().eq(1).prop('outerHTML'); 5 $( this ).parent().eq(0).html( second + first ); 6} );

投稿2020/04/30 07:47

kei344

総合スコア69398

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

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

maturyo

2020/04/30 08:00 編集

申し訳ございません。 急ぎだったもので誤った記述まみれでした。 大変失礼いたしました。
kei344

2020/04/30 09:03

To: maturyoさん 質問文が書き換わっていますが、「jQueryで処理するならgetElementById等ではなくjQueryで処理すればよいのでは」という回答で解決できると思うので、試してみてください。 To: 後から見る方 質問編集前の回答です。 【質問編集履歴|teratail(テラテイル)】 https://teratail.com/questions/history-questions/257670
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問