На основе этой статьи и этой статьи : "Застенчивый дефис" или "Мягкий дефис" можно записать в HTML как: ­
/ ­
/­
(173 декабря = AD шестнадцатеричный).Все они преобразуются в символ U + 00AD.
JavaScript textContent
и nodeValue
текстовых узлов DOM не являются «закодированными сущностями» - они просто содержат действительные сущности.Для того чтобы написать эти символы, вы должны сами их кодировать: \xAD
- это простой способ написать тот же символ в строке JavaScript.String.fromCharCode(173)
также будет работать.
Исходя из вашего ОЧЕНЬ хорошего ответа - версия плагина jQuery:
$.fn.replaceInText = function(oldText, newText) {
// contents() gets all child dom nodes -- each lets us operate on them
this.contents().each(function() {
if (this.nodeType == 3) { // text node found, do the replacement
if (this.textContent) {
this.textContent = this.textContent.replace(oldText, newText);
} else { // support to IE
this.nodeValue = this.nodeValue.replace(oldText, newText);
}
} else {
// other types of nodes - scan them for same replace
$(this).replaceInText(oldText, newText);
}
});
return this;
};
$(function() {
$('div').replaceInText(/\w{10}/g, "$&\xAD");
});
Примечание:
Я думаю, что место, где это должно происходить, НЕ в JavaScript - это должно быть в коде на стороне сервера.Если это только страница, используемая для отображения данных, вы можете легко сделать аналогичное регулярное выражение для замены текста перед его отправкой в браузер.Однако решение JavaScript предлагает одно преимущество (или недостаток в зависимости от того, как вы хотите на него смотреть) - оно не добавляет никаких посторонних символов к данным до тех пор, пока не выполнится скрипт, что означает, что любые роботы, сканирующие ваш HTML-вывод для данных, не увидятстеснительные дефисы.Хотя спецификация HTML интерпретирует его как «подсказку переноса» и невидимый символ, это не гарантируется в остальной части мира Unicode: (цитата из стандарта Unicode через вторую статью, которую я связал)
U + 00AD мягкий дефис указывает точку переноса, где разрыв строки предпочтительнее, когда слово должно переноситься.В зависимости от сценария видимая визуализация этого символа при разрыве строки может отличаться (например, в некоторых сценариях он отображается как дефис -, а в других он может быть невидимым).
Другое примечание: Нашел в этот другой SO Вопрос - похоже, что символ " Zero Width Space " ​
/ ​
/ U+200b
это еще один вариант, который вы могли бы изучить.Это будет \x20\x0b
в виде строки JavaScript.