无法将属性“nodeValue”设置为 null

Posted

技术标签:

【中文标题】无法将属性“nodeValue”设置为 null【英文标题】:Cannot set property 'nodeValue' of null 【发布时间】:2013-04-21 05:34:05 【问题描述】:

我正在浏览一本书,它似乎是正确的,但以下代码不断给我错误:。该代码对我来说很有意义,但我不明白为什么单击清除按钮时无法清除文本值。

var clear = function()

        $("miles").firstChild.nodeValue = "";
        $("gallons").firstChild.nodeValue = "";
        $("mpg").firstChild.nodeValue = "";
         

    window.onload = function () 
        $("calculate").onclick = calculateMpg;
        $("miles").focus();
        $("clear").onclick = clear;
       

html

<section>
    <h1>Calculate Miles Per Gallon</h1>
    <label for="miles">Miles Driven:</label>
    <input type="text" id="miles"><br>
    <label for="gallons">Gallons of Gas Used:</label>
    <input type="text" id="gallons"><br>
    <label for="mpg">Miles Per Gallon</label>
    <input type="text" id="mpg" disabled><br>
    <label>&nbsp;</label>
    <input type="button" id="calculate" value="Calculate MPG"><br>
    <input type="button" id="clear" value="clear"><br>
</section>

【问题讨论】:

更改为 $("miles").get(0).firstChild.nodeValue = "" 其他类似。这应该可以解决您的问题。 @elclanrs - 我不确定他们使用的是 jQuery,因为如果是 jQuery,$("miles") 也不会工作。我想知道$ 是否是document.getElementById() 的同义词。也不是,问题上没有 jQuery 标签。 致 OP。您的项目中的$ 是什么。是 jQuery 吗?还是document.getElementById()?另外,请向我们展示相关的 HTML,以便我们查看您的 javascript 是否正确地定位了正确的对象。 哦,我看到没有 jQuery 标记...是的,我们需要更多信息来弄清楚 $ 是什么... 我认为是prototype.js 【参考方案1】:

我认为您想要的是直接在输入字段上使用 .value 属性:

var clear = function() 
    $("miles").value = "";
    $("gallons").value = "";
    $("mpg").value = "";
 

这里是对发生的事情的解释。现在我们可以看到您的完整页面并看到 $document.getElementById(),问题是您是其中一些节点没有 firstChild。

例如,带有id="miles" 的对象是一个输入标签,它没有子标签,所以.firstChildnull

在这一行:

$("miles").firstChild.nodeValue = "";

$("miles") 获取 DOM 对象。

$("miles").firstChild 返回 null,因为该 DOM 对象没有子对象。

$("miles").firstChild.nodeValue = ""; 是一个错误,因为$("miles").firstChildnullnull 没有属性.nodeValue

【讨论】:

好的,剩下的我都知道了。我只需要使用$("miles").value = "";。感谢您的清理! @oxxi - 当我在 cmets 中与您进行大量工作以让您向我们展示我们需要什么来帮助您和我还提供了正确答案,我提供了第一个答案,并详细解释了您的原始代码有什么问题? @jfriend00 你认为帮助、努力和出色的解释值得被接受吗? :) @Ian - 只能希望,但可惜我已经长大了,知道世界并不总是公平的,但至少我可以问。或者,也许 OP 在他们接受的答案中看到了一些独特的见解? :) @jfriend00 这一直发生在我身上,我相信你已经看过很多了。只要继续努力,有时就会得到回报:)我在其他答案中没有看到任何更好,但它仍然有效:)【参考方案2】:

输入元素没有子节点,因此firstChild 为您提供null,如果您尝试清除输入字段的值,请使用value 属性。

var clear = function()
    $("miles").value = "";
    $("gallons").value = "";
    $("mpg").value = "";

【讨论】:

【参考方案3】:

查看您在 cmets 中发布的代码,问题是 $("miles") 和其他元素没有任何子元素。

您似乎正在尝试执行以下操作:

var clear = function() 
    $("miles").value = "";
    $("gallons").value = "";
    $("mpg").value = "";

【讨论】:

现在您可以看到 HTML,很明显这里的目标对象是输入字段,它们永远不会有子对象。

以上是关于无法将属性“nodeValue”设置为 null的主要内容,如果未能解决你的问题,请参考以下文章

nodevalue

js中的text / value / nodeValue各特性(方法)有啥区别??

JS nodeValue属性 和 innerText属性 获取文本

揭秘DOM中data和nodeValue属性同步改变那些事

PHP DOM textContent vs nodeValue?

nodeTypenodeName和nodeValue