21.04.2023, 21:00
|
Новичок на форуме
|
|
Регистрация: 25.12.2022
Сообщений: 9
|
|
Как выделить иностранные слова в html файле с помощью скрипта
Перевожу иностранную книгу по программированию на Java. Результат оформляю в файл html, чтобы можно было добавить туда картинки, код, выделить код в отдельные фрагменты и т. д. Идея не новая. В тексте много иностранных терминов. Я их хочу выделить, скажем, тегами <b> или <span> со стилем. Но выделять вручную неудобно да и утомительно. Можно ли написать скрипт, выделяющий иностранные слова определенным тегом?
|
|
21.04.2023, 22:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
выделение слов в тексте
IamAnton,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.br {
text-decoration: underline;
color: #0000FF;
}
</style>
</head>
<body>
<div class="content">
Как выделить иностранные слова в html файле с помощью скрипта Перевожу иностранную книгу по программированию на Java. Результат оформляю в файл html, чтобы можно было добавить туда картинки, код, выделить код в отдельные фрагменты и т. д. Идея не новая.
В тексте много иностранных терминов. Я их хочу выделить, скажем, тегами <b> или <span> со стилем. Но выделять вручную неудобно да и утомительно. Можно ли написать скрипт, выделяющий иностранные слова определенным тегом?
</div>
<script>
window.addEventListener('load', function() {
const replacing = elem => {
for (let node, textNodes = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, null, false); node = textNodes.nextNode();) {
let html = node.nodeValue.replace(/([a-z]+)/gi, '<span class="br">$1</span>');
let div = document.createElement('div');
div.innerHTML = html;
node.replaceWith(...div.childNodes)
}
}
let elem = document.querySelector(".content");
replacing(elem);
})
</script>
</body>
</html>
|
|
22.04.2023, 09:23
|
Новичок на форуме
|
|
Регистрация: 25.12.2022
Сообщений: 9
|
|
рони,
Благодарю! Хотя я лично многое из этого не понял.
|
|
22.04.2023, 09:30
|
Новичок на форуме
|
|
Регистрация: 25.12.2022
Сообщений: 9
|
|
рони,
И правда работает. Благодарю, добрый человек. Хотя некоторые вещи мне в этом коде незнакомы.
|
|
22.04.2023, 15:12
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Хреновый код. Он берёт тест, а вставляет html. Если там будет < или > - всё сломается.
__________________
29375, 35
|
|
22.04.2023, 15:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
Сообщение от Aetae
|
Если там будет < или > - всё сломается.
|
можно пример?
|
|
27.04.2023, 10:25
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.br {
text-decoration: underline;
color: #0000FF;
}
</style>
</head>
<body>
<div class="content">
Комметарии в html коде выглядят так: <!-- comment -->.
</div>
<script>
window.addEventListener('load', function() {
const replacing = elem => {
for (let node, textNodes = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, null, false); node = textNodes.nextNode();) {
let html = node.nodeValue.replace(/([a-z]+)/gi, '<span class="br">$1</span>');
let div = document.createElement('div');
div.innerHTML = html;
node.replaceWith(...div.childNodes)
}
}
let elem = document.querySelector(".content");
replacing(elem);
})
</script>
</body>
__________________
29375, 35
|
|
27.04.2023, 11:49
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
Aetae,
спасибо за науку.
|
|
27.04.2023, 13:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
как-то так ...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.br {
text-decoration: underline;
color: #0000FF;
}
</style>
</head>
<body>
<div class="content">
Комметарии в html коде выглядят так: <!-- comment -->.
</div>
<script>
window.addEventListener('load', function() {
const replacing = elem => {
let span = document.createElement('span');
span.className = 'br';
let range = new Range();
let textNodes = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, null, false);
const nodeList = [];
let txtNode = textNodes.nextNode();
while (txtNode) {
nodeList.push(txtNode);
txtNode = textNodes.nextNode();
}
for (let node of nodeList) {
let reg = /([a-z]+)/gi;
let search;
while ((search = reg.exec(node.nodeValue)) != null) {
let txt = search[0],
start = search.index,
end = start + txt.length;
let clone = span.cloneNode(true);
range.setStart(node, start);
range.setEnd(node, end);
range.surroundContents(clone);
reg.lastIndex = 0;
node = clone.nextSibling;
};
}
}
let elem = document.querySelector(".content");
replacing(elem);
})
</script>
</body>
</html>
|
|
|
|