回答編集履歴

2

コメントを踏まえJSについて追記しました

2019/04/11 11:20

投稿

kou0179
kou0179

スコア304

test CHANGED
@@ -35,3 +35,135 @@
35
35
 
36
36
 
37
37
  解決はできませんが、参考までに。
38
+
39
+
40
+
41
+ ---
42
+
43
+
44
+
45
+ # 追記
46
+
47
+
48
+
49
+ #### JSでは、element(要素)の取得に以下のメソッドを用います。
50
+
51
+ **複数のelementを、配列ライクなオブジェクト(HTMLCollection)を返す**
52
+
53
+ - ```document.getElementsByClassName("クラスの名前")```
54
+
55
+ - ```document.getElementsByTagName("タグ名")```
56
+
57
+ - ```document.getElementsByName("Name属性")```
58
+
59
+ ※Elementが複数形でElements
60
+
61
+
62
+
63
+ 例えば、一番最初のdivであれば、```document.getElementsByTagName("div")[0]```
64
+
65
+ 二番目のdivであれば、```document.getElementsByTagName("div")[1]```
66
+
67
+
68
+
69
+ として取得できます。
70
+
71
+
72
+
73
+ **特定の1つのelementを返す**
74
+
75
+ - ```document.getElementById("Id")```
76
+
77
+ ※Elementが単数形
78
+
79
+
80
+
81
+ #### スタイル優先順位、JSによるインラインスタイルの動的変更
82
+
83
+
84
+
85
+ HTMLにおいてスタイルはCSSを用いて指定しますが、CSSは様々な場所から様々な方法指定されています。
86
+
87
+ それにより、1つの要素に対して2つのスタイルが衝突が発生してしまいます。
88
+
89
+ 衝突時は以下の順番で上書きされていきます。(下が最優先)
90
+
91
+ ※一部高度なものは省略します
92
+
93
+
94
+
95
+ 1. 全称セレクタによる指定```*{color:pink;}```
96
+
97
+ 2. タグに対する指定 ```div{color:orange;}```
98
+
99
+ 3. クラスに対する指定 ```.sample-class-name{color:black;}```
100
+
101
+ 4. idに対する指定 ```#sample-id{color:blue;}```
102
+
103
+ 5. インラインによる指定 ```<div style="color:red;"></div>```
104
+
105
+ 6. (!importantによる指定 ```*{color:pink !important;}```)
106
+
107
+ !importantは特殊で、優先順位を無視し最優先になります。
108
+
109
+
110
+
111
+ そして、JavaScriptにおいて、
112
+
113
+
114
+
115
+ ```JavaScript
116
+
117
+ document.getElementsByClassName("sample-class")[0].style = "position:fixed"
118
+
119
+ ```
120
+
121
+
122
+
123
+ で変更されるのは、上記リストの
124
+
125
+ ** 5. インラインによる指定 ```<div style="color:red;"></div>``` **
126
+
127
+ です。これにより、!importantが宣言されていない限り最優先で変更されます。
128
+
129
+
130
+
131
+ #### したがって…
132
+
133
+ ※HTMLの不要な属性は省略しました
134
+
135
+
136
+
137
+ ```html
138
+
139
+ <div id="analysisPg-header" class="header ui-header-fixed ui-header ui-bar-inherit">
140
+
141
+ ```
142
+
143
+
144
+
145
+ こいつに、```position=absolute```を指定したい場合は、以下のJSになります。
146
+
147
+
148
+
149
+ ```JavaScript
150
+
151
+ document.getElementById('analysisPg-header').style.position = 'absolute'
152
+
153
+ ```
154
+
155
+
156
+
157
+ このJSを実行すると、htmlは以下のように変化します。
158
+
159
+
160
+
161
+ ```html
162
+
163
+ <div id="analysisPg-header" class="header ui-header-fixed ui-header ui-bar-inherit" style="position:absolute;">
164
+
165
+ ```
166
+
167
+
168
+
169
+ 上述の通り、このように要素に書かれたスタイル(インラインスタイル)は!important指定が無い限り最優先なので変更されます。

1

JavaScriptのダブルクォーテーションがJavaに影響が出てしまいそうなのでエスケープしました

2019/04/11 11:20

投稿

kou0179
kou0179

スコア304

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  ```Java
26
26
 
27
- jexec.executeScript("document.getElementsByTagName("header")[0].style.position = 'absolute'")
27
+ jexec.executeScript("document.getElementsByTagName('header')[0].style.position = 'absolute'")
28
28
 
29
29
  ```
30
30