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

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

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

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

jQuery

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

Q&A

解決済

3回答

2722閲覧

特定要素内のタグで括られていない文字列をタグで括りたい

castail

総合スコア117

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2015/09/15 01:39

htmlは編集できず表示時JS(jquery)で整形する特殊な状況でのご質問です。

下記の様なhoge要素内にタグで括られていない文字列が点在しています。

変更前ソース

lang

1<div class="hoge"> 2半角全角混合文字列14文字 3<p>…</p>文字列<span>…</span>文字列文字列文字列 4</div>

その中の冒頭の半角全角混合の文字列14文字をdivで括りたいです。

変更後ソース

lang

1<div class="hoge"> 2<div>半角全角混合文字列14文字</div> 3<p>…</p><span>…</span> 4</div>

そのような処理は可能でしょうか?
ご教授のほどよろしくお願いいたします。

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

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

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

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

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

coco_bauer

2015/09/15 02:00

divで括る文字列は、hoge要素の「最初の14文字」と決まっているのでしょうか? それとも、題名にあるように、hoge要素の「タグで括られていない最初の文字列」なのでしょうか。 どちらの処理も可能ですが、当然ながらそれぞれのプログラムは相当違ったものになります。
castail

2015/09/15 02:05

coco_bauer様 ご回答ありがとうございます。 >hoge要素の「タグで括られていない最初の文字列」 こちらでの方法をご教授頂ければと思います。
guest

回答3

0

ベストアンサー

1個目のテキストノードだけ div で囲って、2個目以降は削除するということでしょうか?

contents() でテキストノードも含めた全要素が取れるので、nodeType でテキストノードを判断して処理するといかがでしょうか。

javascript

1$(function(){ 2 var first = true; 3 $(".hoge").contents().each(function() { 4 if (this.nodeType == 3) { 5 if (first) { 6 $(this).wrap('<div>'); 7 first = false; 8 } else { 9 $(this).remove(); 10 } 11 } 12 }); 13})

投稿2015/09/15 02:11

ngyuki

総合スコア4514

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

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

castail

2015/09/15 02:16

ngyuki様 ご回答ありがとうございます。 上記内容ですと、下記の様にhoge直下に空のdivが生成されてしまいました。 = <div class="hoge"><div> </div><div>半角全角混合文字列14文字</div><p>…</p><span>…</span></div>
castail

2015/09/15 02:30

ngyuki様 以下、MineoOkuda様からのご回答で、 こちらは正常に動作されていたとのことでございました。 大変失礼いたしました。 この度はご回答ありがとうございました。
guest

0

テキストノード操作は jQuery の不得手(というよりほとんどない)とするAPIなので DOM API を使用した方が良いと思います。

JavaScript

1jQuery('.hoge').each(function (i, element) { 2 var div = element.ownerDocument.createElement('div'), 3 textNode = element.firstChild; 4 5 div.appendChild(textNode.cloneNode(false)); 6 element.replaceChild(div, textNode); 7});

jsfiddleにサンプルをUPしました。

投稿2015/09/15 02:46

think49

総合スコア18170

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

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

castail

2015/09/15 03:25 編集

think49様 ご回答ありがとうございます。 こちら正常に動作いたしました! 誠にありがとうございます。 ただ、ベストアンサーは先にご回答頂いたngyuki様とさせて頂きます。 何卒ご容赦下さい。
guest

0

こうですかね?

<head> <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function(){ var str = $('.hoge').html(); str = '<div>' + str; str = str.replace(/<p>/,'</div><p>'); $('.hoge').html(str); }) </script> </head>

投稿2015/09/15 02:08

MineoOkuda

総合スコア89

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

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

castail

2015/09/15 02:15

MineoOkuda様 ご回答ありがとうございます。 上記内容ですと、下記の様に文字列がdivで2重に括られてしまいました。 = <div class="hoge"><div> <div>半角全角混合文字列14文字</div> </div><p>…</p><span>…</span> </div>
MineoOkuda

2015/09/15 02:20 編集

私の環境下ではngyuki様のご回答も、私のも同様に動作いたしました。 jQueryの記述に問題が有るのではないですか? ngyuki様のご回答のほうが優れておりますのでそちらをお試しください。
castail

2015/09/15 02:29

MineoOkuda様 ご回答ありがとうございます。 なるほど、そちらでは正常に動作されたのですね。大変失礼いたしました。 この度はご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問