Вы хотите работать с текстовыми узлами, а jQuery избегает текстовых узлов. Поскольку вы не можете обернуть текст, который хотите изменить, в промежуток или что-то в этом роде, вы можете, с некоторым усилием, идентифицировать текстовые узлы и выполнить некоторую операцию. Это быстро складывается, но, похоже, работает:
/* utility function to help us skip whitespace-only nodes */
function isWhitespace( thenode ) {
return !(/[^\t\n\r ]/.test( thenode.data ));
}
/* attach this function to ready() or other trigger */
function fixtext(){
$('div#main')
.contents()
.filter( function() {
return !isWhitespace(this) && this.nodeType == 3;
// nodeType 3 means textNode. Force jQuery to ingest.
})
.each( function(){
$(this).replaceWith( document.createTextNode('Your new text') );
});
}
Это, конечно, можно уменьшить и упростить, но, похоже, оно работает с использованием информации в вашем вопросе и должно дать вам отправную точку в подходе. Это не зависит от точного соответствия вашей строки - просто строка будет расположена в каком-то большем контейнере (здесь у меня это div#main
), и у нее не будет никаких одноуровневых элементов. Даже если ваш случай более сложный, если текст постоянно размещен, вы сможете определить его с помощью функции filter()
.