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

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

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

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1329閲覧

h2から次のh2までを範囲指定して処理を実行したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2016/06/18 03:14

編集2016/06/20 10:20

div contentの中にh2タグが複数個(数は不定)存在しています。
h2:firstからh2:nth-chid(2)、h2:nth-chid(2)からh2:nth-chid(3)、、、と次々に範囲指定し、eachで処理(各範囲内でpタグが4個以上存在する場合、p:last-childの直下に.afterでinputbuttonを追加)を実行していきたいです。
現状ではh2から次のh2までを囲うDOM要素は存在していません。
このような範囲指定・処理を実現する方法はございますでしょうか?

下記のようなコードを試しましたが上手くいきませんでした。
for (var i=0; i<$("#content h2").length; i++) {
$("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")").each(function(){
$(this).next("p:eq(4)").hide();
});
}

for (var i=0; i<$("#content h2").length; i++) {
$("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")").next("p:eq(4)").hide();
});
}

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

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

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

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

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

guest

回答2

0

ベストアンサー

.nextUntil() があります。
$("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")")
という感じではどうでしょうか。

投稿2016/06/18 04:07

編集2016/06/18 04:37
cisdur

総合スコア46

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

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

退会済みユーザー

退会済みユーザー

2016/06/20 10:17

for (var i=0; i<$("#content h2").length; i++) { $("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")").each(function(){ $(this).next("p:eq(4)").hide(); }); } for (var i=0; i<$("#content h2").length; i++) { $("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")").next("p:eq(4)").hide(); }); } ありがとうございます。 試行錯誤しているのですが、思い通りの挙動が実現できません。 決定的な欠陥があればご指摘頂きたいです。
cisdur

2016/06/21 00:09 編集

iで繰り返し処理しているわけですから、eachは要りません。 for (var i = 0; i < $("#content h2").length - 1; i++) { var $hoge = $("#content h2:eq(" + i + ")").nextUntil("#content h2:eq(" + (i + 1) + ")"); if ($hoge.filter("p").length >= 4) { $hoge.filter("p:last").append(test); } } みたいな形になりますが……、hide2e3r様の回答のほうがずっとスマートですね。
guest

0

JavaScript

1$('#content h2').each(function() { 2 if(3 < $(this).nextUntil('h2','p').length){ 3 $(this).nextUntil('h2','p').filter(':last').append('test'); 4 } 5});

で最後のpが指定できると思います。

投稿2016/06/20 13:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問