Javascript 在输入标记之前或之后替换文本标签

Javascript 在输入标记之前或之后替换文本标签,javascript,dom,Javascript,Dom,在HTML中,我有一些带有标签的输入标记: <label>Address <input type="text" name="address" /></label> <label><input type="text" name="surname" /> Surname</label> 不幸的是,标签在输入之前和之后。第一个孩子和最后一个孩子一样 我知道可以将标签放入并使用getElementById。但我不喜欢。 也许还可以

在HTML中,我有一些带有标签的输入标记:

<label>Address <input type="text" name="address" /></label>
<label><input type="text" name="surname" /> Surname</label>
不幸的是,标签在输入之前和之后。第一个孩子和最后一个孩子一样

我知道可以将标签放入
并使用getElementById。但我不喜欢。
也许还可以将
id
for
添加到标签中。。。但我不喜欢


如何轻松地替换“输入之前或之后的第一个TextNode同级”?

我强烈建议使用JQuery这样的跨浏览器框架,而不是使用原始Javascript。然后使用Jquery:

$('input').bind("keyup", function(event) {
    var textNodes = $(this).parent().contents().filter(function() {
        return this.nodeType == Node.TEXT_NODE;
    });
    textNodes.each(function() { this.nodeValue = "bla"; });
});
应该有用!此处演示:


请参见和

您可以遍历
子节点
,找到
文本节点的第一个实例
,然后替换文本

var replaceText = function(inputName, newText) {
    var TEXT_NODE = 3, 
        input_name = document.getElementsByName(inputName)[0], 
        nodes = input_name.parentNode.childNodes;

    for (i = 0; i < nodes.length; i++) {
        if (nodes[i].nodeType === TEXT_NODE) {
            nodes[i].nodeValue = newText;
            break;
        }
    }
};

replaceText("address", "Not an Address");
replaceText("surname", "Not a Surname");
var replaceText=函数(inputName,newText){
var TEXT_NODE=3,
input_name=document.getElementsByName(inputName)[0],
nodes=input_name.parentNode.childNodes;
对于(i=0;i

不起作用,请参阅。另外,从问题来看,他似乎想替换在输入之前或之后出现的
TEXT\u节点
。使用
.html()
您也将销毁
。谢谢,非常好。为什么严格的equal
nodeType===3
而不是
==3
?请参阅关于
==
===
的回答
var replaceText = function(inputName, newText) {
    var TEXT_NODE = 3, 
        input_name = document.getElementsByName(inputName)[0], 
        nodes = input_name.parentNode.childNodes;

    for (i = 0; i < nodes.length; i++) {
        if (nodes[i].nodeType === TEXT_NODE) {
            nodes[i].nodeValue = newText;
            break;
        }
    }
};

replaceText("address", "Not an Address");
replaceText("surname", "Not a Surname");