【问题标题】:Can not get the element [closed]无法获取元素[关闭]
【发布时间】:2022-08-05 02:43:39
【问题描述】:

您好,所以当我尝试获取身体JavaScript中的元素我得到它的错误无效的但每当我使用同样的方法获取元素,但在不同的文件中它可以完美地工作。

我尝试通过 id 和 class 获取元素,但似乎没有任何效果。

这是我的HTML

<table class=\"table table-striped\" >
    <tbody>
        
    </tbody>
</table>

还有我的 JS

    data_base.body.appendChild(tr);


        const data_base = {
            body: document.getElementsByTagName(\"tbody\")[0],
        }

(更新问题已通过将脚本添加到文件底部来解决)

  • 标记中没有类名为“信息”或“隐藏”的元素。
  • @BahramGozalov 如果它们与您的问题无关,那么您为什么要包含尝试选择这些元素的 document.getElementsByClassName 调用? Edit您的帖子并提供minimal reproducible example, 请。
  • 欢迎来到stackoverflow bahram,请务必参观How to Askminimal reproducible example,目前还不清楚您在这里尝试做什么。
  • \"它们与我的问题无关\" 好的,那是什么?你究竟想在哪里访问tbody
  • 确保在元素存在之前您的脚本没有运行。

标签: javascript html


【解决方案1】:

这就是你如何获得你的 tbody 元素

const tbody = document.querySelector('tbody');

所以而不是

data_base.body.appendChild(tr);

利用 :

tbody.appendChild(tr);

你能更清楚地说你想在哪里找到你的 tbody 元素吗?

顺便说一句,你可以更换

    const tr = document.createElement("tr");

    const td_id = document.createElement("td");

    const td_name = document.createElement("td");

    const image = document.createElement("img");

    const td_image = document.createElement("td");

    td_image.appendChild(image);

    const td_price = document.createElement("td");

    const td_operation = document.createElement("td");

    const operation = document.createElement("button");

    td_operation.appendChild(operation);

    td_id.textContent = i;

    td_name.textContent = data_base.naming;

    image.src = data_base.url;

    image.alt = "Couldn't load image";

    td_price.textContent = data_base.price;

    operation.setAttribute("click", "sitDown()");



    tr.appendChild(td_id);
    tr.appendChild(td_name);
    tr.appendChild(td_image);
    tr.appendChild(td_price);
    tr.appendChild(td_operation);
    data_base.body.appendChild(tr);

const tr = document.createElement("tr");

tr.innerHTML = `
<td>${i}</td>
<td>${data_base.naming}</td>
<td><img src="${data_base.url}" alt="Couldn't load image"></td>
<td>${data_base.price}</td>
<td><button></button></td>
`;

data_base.body.append(tr);

使您的代码更具可读性

并且不要像您在这里所做的那样添加事件侦听器作为属性

operation.setAttribute("click", "sitDown()");

【讨论】:

  • 所以我从名为“data_base”的数组中获取它。我试过你的方法,但它告诉我它是未定义的
  • 你能给我提供更多细节,告诉我错误异常吗?
  • script.js:106 Uncaught TypeError: Cannot read properties of null (reading 'appendChild') at appendThis (script.js:106:15) at newTable (script.js:109:5) at giveMe (script.js:137: 9) 在 script.js:141:1
  • @BahramGozalov 请将该错误消息添加到您的问题中,它可能会阻止问题被关闭。
  • 所以让我了解您的问题,您将数据保存在本地存储中并希望将它们放入您的表中,不是吗? @BahramGozalov
【解决方案2】:

newTable() 的最后一行,您尝试使用以下行访问&lt;tbody&gt; data_base.body。但是,这不是how accessing it works

尝试将线路更改为data_base.tBodies[0]

也许您正在考虑document.body 用于同名的属性。

【讨论】:

  • data_base.body 似乎在调用函数之前定义得有些正确。
  • 问题已编辑。无论如何,显然找到了解决方案。
  • 确实如此。感谢帮助!
猜你喜欢
  • 2018-06-29
  • 1970-01-01
  • 2013-08-21
  • 2017-04-18
  • 2018-11-29
  • 2014-02-22
  • 1970-01-01
  • 2014-11-30
  • 2013-04-19
相关资源
最近更新 更多