Точно так же, как вопрос, я пытался извлечь текст, чтобы выполнить некоторую подстановку текста в регулярном выражении, но у меня возникали проблемы там, где мои внутренние элементы (например: <i>
, <div>
, <span>
и т. Д.)были также удалены.
Следующий код, кажется, работает хорошо и решил все мои проблемы.
Он использует некоторые ответы, представленные здесь, но, в частности, будет заменять текст только тогда, когда элементимеет значение nodeType === 3
.
$(el).contents().each(function() {
console.log(" > Content: %s [%s]", this, (this.nodeType === 3));
if (this.nodeType === 3) {
var text = this.textContent;
console.log(" > Old : '%s'", text);
regex = new RegExp("\\[\\[" + rule + "\\.val\\]\\]", "g");
text = text.replace(regex, value);
regex = new RegExp("\\[\\[" + rule + "\\.act\\]\\]", "g");
text = text.replace(regex, actual);
console.log(" > New : '%s'", text);
this.textContent = text;
}
});
. То, что сделано выше, циклически проходит по всем элементам данного el
(который был просто получен с помощью $("div.my-class[name='some-name']");
. Для каждого внутреннего элемента он в основном игнорирует их. Для каждой части текста (как определено if (this.nodeType === 3)
) будет применена подстановка регулярного выражения только к этим элементам.
Часть this.textContent = text
просто заменяет замещенный текст, который в моем случае я искалдля токенов, таких как [[min.val]]
, [[max.val]]
и т. д.
Эта выдержка из короткого кода поможет любому, кто попытается сделать то, что задал вопрос ... и немного больше.