teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

懸念事項を追加

2021/07/16 06:19

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37488

answer CHANGED
@@ -26,4 +26,10 @@
26
26
  currentNode.parentElement.insertBefore(template.content,currentNode);
27
27
  currentNode.parentElement.removeChild(currentNode)
28
28
  }
29
- ```
29
+ ```
30
+
31
+ ---
32
+
33
+ なお、DOMの構造が変わるので、思わぬレイアウトになる場合があります。
34
+
35
+ たとえば、[https://jsfiddle.net/Lhankor_Mhy/L061v9yc/3/](https://jsfiddle.net/Lhankor_Mhy/L061v9yc/3/)

1

質問の追記に合わせて追記

2021/07/16 06:19

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37488

answer CHANGED
@@ -1,2 +1,29 @@
1
1
  ご質問のご希望から外れますが、CSSのunicode-rangeを使うと、アルファベットだけフォントを変えるというようなことが可能です。
2
- [unicode-range - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/@font-face/unicode-range)
2
+ [unicode-range - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/@font-face/unicode-range)
3
+
4
+ ---
5
+
6
+ # 質問の追記に合わせて追記
7
+
8
+ 既にフォントを使い分けているご様子なので、JavaScriptで処理する方法を提示します。
9
+ サンプルを置いておきます。
10
+
11
+ [https://jsfiddle.net/Lhankor_Mhy/L061v9yc/](https://jsfiddle.net/Lhankor_Mhy/L061v9yc/)
12
+
13
+ ```js
14
+ const nodeIterator = document.createNodeIterator(
15
+ document.getElementById('target'),
16
+ NodeFilter.SHOW_TEXT,
17
+ {
18
+ acceptNode(node) {
19
+ return !node.parentElement.classList.contains('alphabet');
20
+ }
21
+ }
22
+ );
23
+ while (currentNode = nodeIterator.nextNode()) {
24
+ const template = document.createElement( 'template' )
25
+ template.innerHTML = currentNode.nodeValue.replace(/(\w+)/g,'<span class="alphabet">$1</span>');
26
+ currentNode.parentElement.insertBefore(template.content,currentNode);
27
+ currentNode.parentElement.removeChild(currentNode)
28
+ }
29
+ ```