相关疑难解决方法(0)

为什么jQuery或像getElementById这样的DOM方法找不到元素?

可能的原因是什么document.getElementById,$("#id")或者任何其他DOM方法/ jQuery选择器没有找到元素?

示例问题包括:

  • jQuery默默地无法绑定事件处理程序
  • jQuery的"吸气"方法(.val(),.html(),.text())返回undefined
  • 返回的标准DOM方法null导致以下任何错误:

    未捕获的TypeError:无法设置null的属性'...'未捕获的TypeError:无法读取null的属性'...'

    最常见的形式是:

    未捕获的TypeError:无法设置null的属性'onclick'

    未捕获的TypeError:无法读取null的属性"addEventListener"

    未捕获的TypeError:无法读取null的属性'style'

javascript jquery dom

446
推荐指数
6
解决办法
11万
查看次数

设置innerHTML:为什么不更新DOM?

想知道为什么我document.getElementById("my_div").innerHTML在重新分配变量时无法更新DOM.例如:

<div id="my_div" onclick="clicky();">
    Bye.
</div>
<script type="text/javascript" charset="utf-8">
    function clicky() {
        var myDivValue = document.getElementById("my_div").innerHTML;
        myDivValue = "Hello";
        console.log(myDivValue);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

在日志中,我可以看到变量在我点击时重新分配,但my_div的innerHTML保持不变.为什么是这样?


经过几年的经验......

对于刚开始的人(就像我一样)并发现自己也在问同样的事情,有两个重要的概念需要理解:

  1. 通过引用分配:我的错误是我认为var myDivValue = element.innerHTML会为innerHTML创建一个引用/地址,每次我为该引用分配一个新值时,我都可以更新内容,但这不是它的工作原理.
  2. 按值分配:相反,我只是制作一个element.innerHTML值的副本(这是空白的)并将值赋给myDivValue,然后在myDivValue = "Hello";,我正在分配一个新值myDivValue,所以当然它永远不会更新element.innerHTML.

令人困惑的部分:当=在JS中使用赋值运算符()时,你不是要明确指定引用或值(var referenceName = reference_to_thingvs. var containerName = newValue),

正如许多人在答案中所说,正确的方法是将document.getElementById("my_div")元素分配给myDiv:

var myDiv = document.getElementById("my_div")
Run Code Online (Sandbox Code Playgroud)

现在我有一个被调用元素的引用myDiv,我可以随时更新innerHTML属性:

myDiv.innerHTML …
Run Code Online (Sandbox Code Playgroud)

javascript innerhtml

16
推荐指数
2
解决办法
5万
查看次数

标签 统计

javascript ×2

dom ×1

innerhtml ×1

jquery ×1