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

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

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

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

4480閲覧

jqueryで htmlの閉じタグ だけを 動的に追加したい

Novz

総合スコア22

HTML5

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2019/09/03 14:43

いつもお世話になっております。

下記のようなhtmlタグに対して、
liタグ4個ごとに、その直後でul要素を一度閉じて、

<div class="kaigyo"></div>

というタグを挿入した上で

<ul class="printpage">タグを再び追加する・・

という処理を動的に行いたいのですが、
afterやappendなどでは閉じタグだけ追加すると自動的に補完されてしまい思ったような動作になりません。

なにか良い方法はないでしょうか。

例えば、下記のようなタグを

<ul class="printpage"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>

下記のように動的に処理したいです。

<ul class="printpage"> <li></li> <li></li> <li></li> <li></li> </ul> <div class="kaigyo"></div> <ul class="printpage"> <li></li> <li></li> <li></li> <li></li> </ul> <div class="kaigyo"></div> <ul class="printpage"> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>

下記のようにjqueryで記述してみたのですが

$(function(){ $('ul.printpage li:nth-child(4n)').after('<div class="kaigyo"></div>'); });
<ul class="printpage"> <li></li> <li></li> <li></li> <li></li> <div class="kaigyo"></div> <ul class="printpage"></ul> <li></li> <li></li> <li></li> <li></li> </ul>

どうしてもこの様になってしまって意図通りにできません。

ご教授のほどよろしくおねがいします。

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

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

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

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

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

guest

回答4

0

DocumentFragment を作って置き換えます。

jQuery

1var original = $('.printpage'); 2var fragment = document.createDocumentFragment(); 3var lis; 4while (lis = $('>li', original), lis.length) { 5 var container = $(original[0].cloneNode(false)); 6 container.append($('>li', original).slice(0, 4)); 7 fragment.appendChild(container[0]); 8 fragment.appendChild($('<div class="kaigyo"></div>')[0]); 9} 10 11fragment.removeChild(fragment.lastChild); 12original.replaceWith(fragment);

https://developer.mozilla.org/ja/docs/Web/API/DocumentFragment
https://api.jquery.com/slice/
https://api.jquery.com/replaceWith/

投稿2019/09/04 01:40

編集2019/09/04 01:41
x_x

総合スコア13749

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

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

0

ベストアンサー

javascript

1<script> 2$(function(){ 3 var newUL=[]; 4 while($('.printpage li').length>0){ 5 if(newUL.length>0) newUL.push($('<div class="kaigyo"></div>')); 6 newUL.push($('<ul class="printpage">').append($('.printpage li:lt(4)'))); 7 } 8 $('.printpage').after(newUL).remove(); 9}); 10</script> 11<ul class="printpage"> 12<li>1</li> 13<li>2</li> 14<li>3</li> 15<li>4</li> 16<li>5</li> 17<li>6</li> 18<li>7</li> 19<li>8</li> 20<li>9</li> 21<li>10</li> 22<li>11</li> 23<li>12</li> 24<li>13</li> 25<li>14</li> 26<li>15</li> 27<li>16</li> 28</ul>

投稿2019/09/04 01:02

yambejp

総合スコア114843

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

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

Novz

2019/09/04 05:09

ありがとうございます! 多くの例をいただき、自分の技術の未熟さを痛感しました。 yambejp様のコードが私の技術でも理解しやすく、これからli要素の個数が増えていく場合も対応できそうでしたのでベストアンサーにさせていただきます。 本当にありがとうございました。感謝しております。
guest

0

回りくどく作ってみました。

html

1<div id="parent"> 2 <ul class="printpage"> 3 <li>1</li> 4 <li>2</li> 5 <li>3</li> 6 <li>4</li> 7 <li>5</li> 8 <li>6</li> 9 <li>7</li> 10 <li>8</li> 11 <li>9</li> 12 <li>10</li> 13 <li>11</li> 14 <li>12</li> 15 <li>13</li> 16 <li>14</li> 17 <li>15</li> 18 <li>16</li> 19 </ul> 20</div>

js

1<script> 2const sep = 4; 3$(function(){ 4 const kaigyo = $('<div></div>',{ 5 class:'kaigyo' 6 }); 7 8 const li_count = $('.printpage').children('li').length; 9 let ulnew = $('<ul></ul>'); 10 for(let i = 1;i<=li_count;i++){ 11 let cnt = i-1; 12 ulnew.append($($('.printpage').children('li').get(cnt)).clone(true)); 13 if((i%4)==0){ 14 ulnew.after(kaigyo); 15 $('#parent').append(ulnew); 16 ulnew = $('<ul></ul>'); 17 } 18 } 19 $('.printpage').remove(); 20 $('ul').addClass('printpage'); 21});

sepで割り切れなかったりした分の余りとかは考えてみてください。

投稿2019/09/04 02:41

m.ts10806

総合スコア80850

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

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

0

jquery

1var origin=$('.printpage'); 2$('>li:nth-of-type(n):nth-of-type(-n+4)', origin).wrapAll('<ul class="printpage"></ul>');//最初の4つをprintpageで包みます 3$('>li:nth-of-type(n):nth-of-type(-n+4)', origin).wrapAll('<ul class="printpage"></ul>');//4回繰り返します 4$('>li:nth-of-type(n):nth-of-type(-n+4)', origin).wrapAll('<ul class="printpage"></ul>'); 5$('>li:nth-of-type(n):nth-of-type(-n+4)', origin).wrapAll('<ul class="printpage"></ul>'); 6$('>ul:nth-of-type(n):nth-of-type(-n+3)', origin).after('<div class="kaigyo"></div>');//最初の3つの後にkaigyoを入れます 7$('>*', origin).unwrap();//外側のprintpageをunwrapします。

投稿2019/09/03 18:22

編集2019/09/04 03:36
querykuma

総合スコア777

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

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

querykuma

2019/09/04 18:08

> teratailは技術に興味のある人達が集まって、質問と回答を通してお互いに知識や情報を交換・共有する場所です。 > ここは、お互いの好意の上に成り立っている助け合いの場であり、自分がわからないところを人に教えてもらい、自分がわかるところを人に教えてあげる場所です。 > https://teratail.com/help/question-tips 悪意でteratailに参加している方がいるとは思いたくありませんが、何故低評価を押されたのでしょうか? 何が低評価の理由になったのかコメントに書いていただけると幸いです。
x_x

2019/09/05 00:25

実行してみれば意図通りになっていないことははっきりするのでは? 一度でも確認してみたのでしょうか?
querykuma

2019/09/05 03:45

jquery-3.4.1と1.12.4で、FirefoxとChromeで4回確認しましたが意図通りになっていると思います。 あなたのプログラムについても4回確認しました。 何をおっしゃっているのか分かりません。 「一度でも確認してみたのでしょうか?」というあなたに私のプログラムを一度でも確認したのか聞きたいぐらいです。
x_x

2019/09/05 04:19

もちろんわたしは確認しましたが、その時から内容が変わっているようですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問