回答編集履歴

2

javascriptでHTMLの構造を変更する方法

2015/09/14 03:22

投稿

KiKiKi_KiKi
KiKiKi_KiKi

スコア596

test CHANGED
@@ -28,8 +28,72 @@
28
28
 
29
29
 
30
30
 
31
- ---
31
+ ---
32
32
 
33
33
 
34
34
 
35
35
  或いは、(2)の<img>を別の<a>タグで囲み、(1)のリンクはそのままにしておき、javascriptで<li>クリック時に(2)のエリアでなければ、`a.hoge3`をクリックしたことにするイベントを付けてしまう方法でも実現できそうにかと思います。
36
+
37
+
38
+
39
+ ---
40
+
41
+
42
+
43
+ 追記: jQueryでHTML構造を変更する方法
44
+
45
+ `a.hoge3`をcloneして使えばclassやdata-kz-track-on-clickなど丸っと持って行くことができます。
46
+
47
+ まだリファクタリング出来ると思いますが、ざっくり処理を書いてみます。
48
+
49
+ (1)
50
+
51
+ ```javascript
52
+
53
+ jQuery('#hogeid1').find('li').each(function(i, elm) {
54
+
55
+ var $li = jQuery(elm),
56
+
57
+ $content = jQuery($li.html()), // 構造変更の度にレンダリングしないように外に取り出して使う
58
+
59
+ $a = $li.find('a.hoge3').clone(),
60
+
61
+ $linkArea = $content.find('.hoge2');
62
+
63
+ // aタグをspanに置き換える
64
+
65
+ $linkArea.html( '<span class="hoge3">' + $linkArea.text() + '</span>' );
66
+
67
+ // aタグでラップしたものでliの中身を置き換える。
68
+
69
+ $li.html( $a.html( $content ) );
70
+
71
+ });
72
+
73
+ ```
74
+
75
+
76
+
77
+ (2)
78
+
79
+ ```javascript
80
+
81
+ jQuery('#hogeid1').find('li').each(function(i, elm) {
82
+
83
+ var $li = jQuery(elm),
84
+
85
+ $a = $li.find('a.hoge3').clone(),
86
+
87
+ $img = $li.find('img');
88
+
89
+ // imgタグをaタグでラップしてliの先頭に追加
90
+
91
+ $li.prepend( $a.html($img) );
92
+
93
+ });
94
+
95
+ ```
96
+
97
+ 'a.hoge3'は`.hoge3`でも大丈夫です。jQueryのclassセレクタはタグ名があった方が高速な場合もあるようです。
98
+
99
+ 参考: [jQueryのclassセレクタに要素名を付ける](http://blog.webcreativepark.net/2014/12/02-013527.html)

1

javacriptでの実現方法案の追記

2015/09/14 03:22

投稿

KiKiKi_KiKi
KiKiKi_KiKi

スコア596

test CHANGED
@@ -25,3 +25,11 @@
25
25
 
26
26
 
27
27
  参考: [HTML aタグの中にaタグを入れると崩れる](http://chaika.hatenablog.com/entry/2014/04/24/234351)
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ 或いは、(2)の<img>を別の<a>タグで囲み、(1)のリンクはそのままにしておき、javascriptで<li>クリック時に(2)のエリアでなければ、`a.hoge3`をクリックしたことにするイベントを付けてしまう方法でも実現できそうにかと思います。