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

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

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

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

Q&A

解決済

2回答

4408閲覧

jQueryのafterメソッドなのですが

yamagata_user

総合スコア40

jQuery

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

0グッド

0クリップ

投稿2017/12/03 03:53

編集2017/12/03 06:22

afterを使ってhtmlのタグをつけるときに

<script> var a = $(".after1"); a.after("<div class='test'></div>"); </script>

と書くとできますが、HTML的に正しいのは(<div class="test"></div>のようにクラス名をダブルクオートで囲む書き方ですよね。
jQueryではafterに限らず似たような状況でhtmlタグを挿入したいときにはクラスをつけるときには原則的にダブルクオートの使用は禁止されているのでしょうか。

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

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

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

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

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

kei344

2017/12/03 04:01

提示されたスクリプトではエラーが起きるので修正してください。
yamagata_user

2017/12/03 04:04

a.afer("<div class='test'></div>");ですか?
yamagata_user

2017/12/03 04:09

a.after("<div class="test"></div>");だと思います。
defghi1977

2017/12/03 04:09

投稿する前に実際に動かして少なくとも質問以前のエラーが出ていないことを確認して下さいということです. 「afer」じゃなくて「after」ですよね?
yamagata_user

2017/12/03 04:12

そうです。なので1つ前の返信でtを追加しました。
defghi1977

2017/12/03 04:15

ですから「コメント返信に追加」じゃなくて「質問本文を修正」してほしいのです.
yamagata_user

2017/12/03 04:16

質問文の編集ってできたんですね。失礼しました。修正しました。
defghi1977

2017/12/03 04:17

でもそれだとエラーが出ますよ. もう少し落ち着いて.
yamagata_user

2017/12/03 04:20

aは変数定義したオブジェクトなのでその定義も追加しました。
defghi1977

2017/12/03 04:22

"<div class="aaa"></div>"じゃなくて"<div class='aaa'></div>"じゃないのですか?
s8_chu

2017/12/03 04:26

この質問って「なんで`"<div class="aaa"></div>"`だとエラーなの?ぜったいに"<div class='aaa'></div>"じゃなきゃだめなの?」って質問なのでは?
defghi1977

2017/12/03 04:36

最初のコードが「a.afer(<div class="aaa"></div>);」だったという経緯があります. 多分HTMLとJavaScriptのクォートの使い方に関する質問だとは思います.
yamagata_user

2017/12/03 06:23

そうです。ソースコードも修正しました。たびたびすみません。。
guest

回答2

0

ベストアンサー

HTMLではノードの属性名, 属性値を囲む場合"を使っても'を使っても構いません. 従って

HTML

1<div class="aaa"></div> 2<div class='aaa'></div>

のどちらを使っても良いのです. 但し"で囲った中に"が含まれる, もしくは'で囲った中に'が含まれるとHTML文法としてエラー(正しく解釈されない)になります.

HTML

1<div class="aaa" title="タイトル"a""></div> 2<div class='aaa' title='タイトル'a''></div>

そのため, (英語といった母国語等の影響により)HTML内に頻繁に'が現れる可能性がある場合, "で囲うことが推奨されることもあります. またPHP等の処理言語によっては"'を使い分けるものもあり, その場合はまた条件が変わってきます.

NOTE:
HTMLには文字の実体(エンティティ)参照と呼ばれる仕組みもあり, "&quot;と, '&#39;(39は'の文字コード)として表すことも出来ます. 従って, 先ほどのコードを

HTML

1<div class="aaa" title="タイトル&quot;a&quot;"></div> 2<div class='aaa' title='タイトル&#39;a&#39;'></div>

と書き換えることで"内に正しく「"文字」を挿入するすることも可能です.


さてこのHTMLコードをjQuery等で使う文字列として扱うことを考えましょう. JavaScriptでは"'のどちらかで囲ったコードを文字列リテラルとして扱います. 従って次のコードは正しい内容です.

JavaScript

1a.after('<div class="aaa"></div>'); 2a.after("<div class='aaa'></div>");

ここでもし, "'の扱いを逆にしてしまうと

JavaScript

1a.after('<div class='aaa'></div>'); 2a.after("<div class="aaa"></div>");

となり, 今度はJavaScriptとしての文字列の範囲が曖昧となりエラーとなります. この場合, 文字列内部の"'とを\でエスケープすると正しい内容となります.

JavaScript

1a.after('<div class=\'aaa\'></div>'); 2a.after("<div class=\"aaa\"></div>");

NOTE:
JavaScriptにもHTMLと同様に文字を文字コードで挿入する方法(\uXXXX)があります.

NOTE:
ES2015で導入されたテンプレートリテラルを用いると, 文字列の定義の際に引用符の代わりにアクサングラーブ「`」を使うことも出来ます.

JavaScript

1a.after(`<div class='aaa'></div>`); 2a.after(`<div class="aaa"></div>`);

投稿2017/12/03 04:54

編集2017/12/03 10:02
defghi1977

総合スコア4756

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

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

yamagata_user

2017/12/03 06:19

ありがとうございます。 jQueryの文法ミスだと思ってましたが、htmlのミスだったんですね。 自分なりに理解できたこととエラーを回避するための方法をまとめてみたのですが ・ダブルクオートとシングルクオートは原則的にどちらでもよい。 ・ただしダブルクオートの中にダブルクオートやシングルクォートの中にシングルクォートは入れるのは禁止  →ただしクオートの直前に「\」を入れれば区別されるのでダブルクオートの中にダブルクオートやシングルクォートの中にシングルクォートを使ってもよい ということでしょうか。
defghi1977

2017/12/03 06:38

概ねその見解で間違いありません. このような問題はプログラミング界隈ではお目にかかるもので, とにかくその文字列がどの世界(HTML?JavaScript?)かを意識することが大切です.
yamagata_user

2017/12/03 07:06

そうなんですね。 HTMLでクラス名はダブルクオートで囲うのが今まで自分の中での常識だったのでかなり戸惑いました。 設計やコーディングするときは注意します。 このたびはありがとうございました。
yamagata_user

2017/12/03 12:15

テンプレートリテラル・・調べたのですがよく理解できませんでした。 それを使うと「`」で囲ってもOKなんですね。 ありがとうございます。
guest

0

テキストとしていれようとしているからおかしくなるのでは?
きちんとアペンドしていく意識をもてばクォーテーションで悩む必要はありません

javascript

1<script> 2$(function(){ 3 var a = $(".after1"); 4 a.after($("<div>").addClass("test").text("test")); 5}); 6</script> 7 8<a href="hoge" class="after1">hoge</a> 9<a href="fuga" class="after1">fuga</a> 10<a href="piyo" class="after2">piyo</a>

投稿2017/12/03 07:12

yambejp

総合スコア114777

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問