回答編集履歴

3

IE対応

2019/04/19 05:24

投稿

yambejp
yambejp

スコア114876

test CHANGED
@@ -86,6 +86,36 @@
86
86
 
87
87
  });
88
88
 
89
+ function getIndexs(ele){ //IE対応版
90
+
91
+ if(p=ele.parentNode){
92
+
93
+ var idxs=[];
94
+
95
+ if(eles=p.children){
96
+
97
+ for(var i=0;i<eles.leng
98
+
99
+ if(eles[i]==ele) brea
100
+
101
+ }
102
+
103
+ idxs=getIndexs(p).conca
104
+
105
+ }
106
+
107
+ return idxs;
108
+
109
+ }else{
110
+
111
+ return [0];
112
+
113
+ }
114
+
115
+ }
116
+
117
+ /*
118
+
89
119
  function getIndexs(ele){
90
120
 
91
121
  if(ele.parentNode){
@@ -101,6 +131,8 @@
101
131
  }
102
132
 
103
133
  }
134
+
135
+ */
104
136
 
105
137
  function compArray(a1,a2){
106
138
 

2

chousei

2019/04/19 05:24

投稿

yambejp
yambejp

スコア114876

test CHANGED
@@ -70,11 +70,19 @@
70
70
 
71
71
  var t=document.querySelector('.is-target');
72
72
 
73
+ var d=document.querySelector('#D');
74
+
75
+ var g=document.querySelector('#G');
76
+
73
77
  console.log(compArray(getIndexs(c),getIndexs(a)));//#Cより#Aは前(-1)
74
78
 
75
79
  console.log(compArray(getIndexs(c),getIndexs(t)));//#Cより.is-targetは後(1)
76
80
 
77
81
  console.log(compArray(getIndexs(c),getIndexs(c)));//#Cと#Cは同じ
82
+
83
+ console.log(compArray(getIndexs(d),getIndexs(g)));//#Dは#Gを含む(2);
84
+
85
+ console.log(compArray(getIndexs(g),getIndexs(d)));//#Gは#Dに含まれる(-2);
78
86
 
79
87
  });
80
88
 
@@ -98,13 +106,15 @@
98
106
 
99
107
  for(var i in a1){
100
108
 
109
+ if(typeof a2[i]=="undefined") return 2;
110
+
101
111
  if(a1[i]<a2[i]) return 1;
102
112
 
103
113
  if(a1[i]>a2[i]) return -1;
104
114
 
105
115
  };
106
116
 
107
- return 0;
117
+ return a1.length==a2.length?0:-2;
108
118
 
109
119
  }
110
120
 
@@ -120,7 +130,7 @@
120
130
 
121
131
  <p id="C"></p>
122
132
 
123
- <div>
133
+ <div id="G">
124
134
 
125
135
  <p id="D"></p>
126
136
 
@@ -135,3 +145,5 @@
135
145
  </body>
136
146
 
137
147
  ```
148
+
149
+ ※親子関係のチェックが抜けていたので一部修正しました

1

調整

2019/04/19 03:50

投稿

yambejp
yambejp

スコア114876

test CHANGED
@@ -53,3 +53,85 @@
53
53
  完全に相対値をとりたいなら、自分の親を再帰的に拾って
54
54
 
55
55
  インデックスを拾っていく必要があります
56
+
57
+
58
+
59
+ # 追記
60
+
61
+ ```javascript
62
+
63
+ <script>
64
+
65
+ window.addEventListener('DOMContentLoaded', function(e){
66
+
67
+ var a=document.querySelector('#A');
68
+
69
+ var c=document.querySelector('#C');
70
+
71
+ var t=document.querySelector('.is-target');
72
+
73
+ console.log(compArray(getIndexs(c),getIndexs(a)));//#Cより#Aは前(-1)
74
+
75
+ console.log(compArray(getIndexs(c),getIndexs(t)));//#Cより.is-targetは後(1)
76
+
77
+ console.log(compArray(getIndexs(c),getIndexs(c)));//#Cと#Cは同じ
78
+
79
+ });
80
+
81
+ function getIndexs(ele){
82
+
83
+ if(ele.parentNode){
84
+
85
+ var idx=[].indexOf.call(ele.parentNode.children,ele);
86
+
87
+ return getIndexs(ele.parentNode).concat([idx]);
88
+
89
+ }else{
90
+
91
+ return [0];
92
+
93
+ }
94
+
95
+ }
96
+
97
+ function compArray(a1,a2){
98
+
99
+ for(var i in a1){
100
+
101
+ if(a1[i]<a2[i]) return 1;
102
+
103
+ if(a1[i]>a2[i]) return -1;
104
+
105
+ };
106
+
107
+ return 0;
108
+
109
+ }
110
+
111
+ </script>
112
+
113
+ <body>
114
+
115
+ <div>
116
+
117
+ <p id="A"></p>
118
+
119
+ <p id="B"></p>
120
+
121
+ <p id="C"></p>
122
+
123
+ <div>
124
+
125
+ <p id="D"></p>
126
+
127
+ <p id="E" class="is-target"></p>
128
+
129
+ </div>
130
+
131
+ <p id="F"></p>
132
+
133
+ </div>
134
+
135
+ </body>
136
+
137
+ ```