#javascript #jquery
#javascript #jquery
Вопрос:
Я использую плагин, который отображает «кнопку» в стиле div, html которой выглядит следующим образом:
<div id="div-id">
"Button Label"
<input type="file" . . . >
</div>
Как мне динамически изменять текст «Метки кнопки» с помощью jQuery, оставляя входные данные нетронутыми?
Я пробовал использовать .text(), но это также заменяет ввод.
(Примечание: у меня нет контроля над HTML-кодом, который отображает плагин, поэтому я застрял с этой структурой).
Спасибо!
Комментарии:
1. есть ли у вас ссылка, и какой плагин вы используете
2. Используя плагин ajax fileuploader. Нет ссылки на мой собственный код, но пример на домашней странице плагина. valums.com/ajax-upload
Ответ №1:
Вот одно из решений. Сохраните дочерние элементы div, задайте текст, а затем добавьте к нему childrden обратно.
var $children = $myDiv.children();
$myDiv.text("New Button Label").append($children);
Ответ №2:
$("#div-id").html(function(i,oldhtml){
return oldhtml.replace("Button Label","New label");
});
Ответ №3:
Вы можете напрямую получить доступ к текстовому узлу в обычном javascript с помощью кода, подобного этому:
function getFirstTextNode(el) {
var children = el.childNodes;
for (var i = 0; i < children.length; i ) {
if (children[i].nodeType == 3) {
return(children[i]);
}
}
}
var textNode = getFirstTextNode(document.getElementById("div-id"));
textNode.nodeValue = "New Label ";
Ответ №4:
Вы можете перебирать каждый узел и искать текстовые узлы с соответствующим содержимым. После нахождения работайте только с этим узлом.
function isTextNode(node) {
return node.nodeType == 3;
}
function hasText(node, text) {
return node.nodeValue.trim() == text;
}
var nodes = $("#root").contents().filter(function() {
return isTextNode(this) amp;amp; hasText(this, '"Button Label"');
});
nodes.replaceWith("New Label");
Вот пример.