相关疑难解决方法(0)

querySelectorAll和getElementsBy*方法返回什么?

getElementsByClassName(等类似的功能getElementsByTagNamequerySelectorAll)的工作方式相同getElementById,还是他们返回元素的数组?

我问的原因是因为我试图改变所有元素的样式getElementsByClassName.见下文.

//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';
Run Code Online (Sandbox Code Playgroud)

javascript dom-traversal getelementsbyclassname

125
推荐指数
8
解决办法
8万
查看次数

如何正确迭代getElementsByClassName

我是Javascript初学者.

我正在通过它创建网页window.onload,我必须通过类名(slide)找到一堆元素,并根据某些逻辑将它们重新分配到不同的节点.我有一个函数Distribute(element),它将一个元素作为输入并进行分配.我想做这样的事情(例如这里这里所概述的):

var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
   Distribute(slides[i]);
}
Run Code Online (Sandbox Code Playgroud)

然而这对我来说并没有什么魔力,因为getElementsByClassName实际上并没有返回数组,而是a NodeList,这是......

......这是我的推测......

...在函数Distribute内部被更改(在此函数中正在更改DOM树,并且发生某些节点的克隆).For-each循环结构也没有帮助.

变量幻灯片的行为确实是非确定性的,通过每次迭代,它都会大大改变元素的长度和顺序.

在我的情况下迭代NodeList的正确方法是什么?我在考虑填充一些临时阵列,但我不知道该怎么做......

编辑:

我忘了提到的重要事实是,在另一个内部可能有一个幻灯片,这实际上是slides由于用户Alohci我刚刚发现的变量.

我的解决方案是先将每个元素克隆到一个数组中,Distribute()然后逐个传递数组.

html javascript dom

77
推荐指数
6
解决办法
12万
查看次数

forEach Node.childNodes的方法?

在提供关于问题属性的错误答案之后,我检查了元素的返回并找到了一种方法..item()Node.childNodes__proto__childNodesformforEach

所述forEach的方法Node.childNodes中没有的说明书中记载NodeList,Methods以MDN,或接口节点列表,并没有出现在被提及迭代使用的forEach方法的节点列表或链接到该问题页; 虽然它出现在Chromium 50中.

该方法仅适用于相对较新版本的Chrome/Chromium吗?如果是,是否记录在案?

有没有关于forEach()方法的文件Node.childNodes


document.querySelector("form").addEventListener("submit", function(e) {
  e.preventDefault();
  var form = e.target;
  form.childNodes.forEach(function(el) {
    if (el.tagName === "INPUT" && el.type !== "submit")
      snippet.log("name:" + el.name + ", value:" + el.value)
  });
});
Run Code Online (Sandbox Code Playgroud)
<form>
  <input type="text" name="firstName" value="The first name">
  <input type="text" name="lastName" value="The last name">
  <input type="email" name="emailAddress" value="email@example.com">
  <br>
  <input type="submit" …
Run Code Online (Sandbox Code Playgroud)

javascript dom google-chrome nodelist chromium

13
推荐指数
2
解决办法
1153
查看次数

无法使用 forEach 循环遍历 HTMLCollection

我试图为每个类名为 的元素分配一个单击事件director__card--iconBox。我选择这些元素的方式是通过getElementsByClassName. background-color在编写当前代码后,我正在测试将其父 div应用于红色的函数。最终目标是能够翻转 div 并显示稍后出现的 div 的背面。

const toggleButton = document.getElementsByClassName("director__card--iconBox");

toggleButton.forEach((el) =>
  el.addEventListener("click", (event) => {
    const card = event.target.parentElement.querySelector(".director__card");
    card.classList.toggle("open");
  })
);



Run Code Online (Sandbox Code Playgroud)

我正在取回一个 HTMLCollection。我的想法是,由于 HTMLCollection,这不会起作用?我尝试过 querySelectorAll 返回节点列表,但 NodeList 返回空。

html javascript dom

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

选择所有img标签并给它们一个src

我尝试了很多方法来解决这个问题,但无法解决。

我的问题是我尝试<img>通过执行来选择所有内容

document.getElementsByTagName("img")
Run Code Online (Sandbox Code Playgroud)

然后.src=text[x]像这样添加:

document.getElementsByTagName("img").src=text[x];
Run Code Online (Sandbox Code Playgroud)

好吧,那是行不通的。我也尝试过使用这个:

var r = document.getElementsByTagName("img");
r.src=text[x];
Run Code Online (Sandbox Code Playgroud)

再说一次,什么也没有。如果我使用这个代码(immg是所有的ID <img>):

document.getElementById('immg').src=text[x];
Run Code Online (Sandbox Code Playgroud)

它确实有效,但仅适用于第一个对象,因为它只搜索具有 ID 的一个元素immg,而不是所有元素。

我的完整代码:

第一个功能

function generateChar()
{
    var text = [
        "img/Water1.png",
        "img/Water2.png",
        "img/Water3.png",
        "img/Water4.png",
        "img/Water5.png",
        "img/Water6.png",
    ];
    var size = text.length;
    var x = Math.floor(size*Math.random());
    //document.getElementsByTagName("img").src=text[x];
    //document.getElementById('immg').src=text[x];
    var r = document.getElementsByTagName("img");

    r.src=text[x];
    //console.log(r);
}
Run Code Online (Sandbox Code Playgroud)

其他有用的代码:

var nbDiv = 50;
for(var i = 0; i < nbDiv; i++){
    var div = document.createElement('div');
    var imgg = document.createElement('img'); …
Run Code Online (Sandbox Code Playgroud)

javascript

7
推荐指数
1
解决办法
5173
查看次数

类型 'HTMLCollectionOf&lt;HTMLCanvasElement&gt;' 必须有一个返回迭代器的 '[Symbol.iterator]()' 方法

我正在构建一个数组

const myCanvas = documen.getElementsByTagName('canvas')

它实际上是有效的。它返回给我这样的东西:

images: [
0: canvas,
1: canvas,
2: canvas
]
Run Code Online (Sandbox Code Playgroud)

这是一个 Typescript 项目,我想迭代这个数组并转换每个图像以记录它。

像这样:

for (const image of myCanvas) {
      console.log(canvas.toDataURL());
    }
Run Code Online (Sandbox Code Playgroud)

(我没有使用 foreach 因为它不适用于 HTMLCollectionOf 类型)

我需要迭代 getElementsByTagName 返回给我的 HTMLCollection。输出是Type 'HTMLCollectionOf' 必须有一个返回迭代器的 'Symbol.iterator' 方法

错误

typescript for-of-loop

4
推荐指数
3
解决办法
5300
查看次数

如何使用javascript隐藏子元素

<div id="wpq2">
   <div class="subClass">
   <a id="linkTO" class="subClass">New Item</a>
   or
   <a class="subClass">edit</a>
   this list
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想隐藏所有的东西,除了

   <a id="linkTO" class="subClass">New Item</a>
Run Code Online (Sandbox Code Playgroud)

我无法访问 html ,我必须使用 javascript

我试过了

var parentID = document.getElementById('wpq2');
var sub = parentID.getElementsByClassName('subClass');
var lastChild = sub[0].lastChild;
lastChild.style.display = 'none';
Run Code Online (Sandbox Code Playgroud)

使用javascript不知道该怎么做

请建议

javascript

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

使用JavaScript从每个元素中删除隐藏的类

我试图通过JavaScript点击元素中的所有隐藏类.这是我用来尝试这样做的虚拟代码:

    <style>
    .hidden {display:none;}
    </style>
    

    <div>Value 1</div>
    <div class="hidden">Value 2</div>
    <div class="hidden">Value 3</div>
    <div class="hidden">Value 4</div>
    
    
    <button onclick="removeHidden()">Show All</button>
    
    
    <script>
    function removeHidden()
    {
        var hidden = document.getElementsByClassName("hidden");
        for(var i=0; i<hidden.length; i++)
        {
            hidden[i].classList.remove("hidden");
        }
    }
    </script>
Run Code Online (Sandbox Code Playgroud)

单击按钮时,我希望删除所有类"隐藏",但奇怪的是,它会从第二个div和第四个div中删除隐藏的类,但会跳过第三个.

我得到的结果是:

Value 1
Value 2
Value 4
Run Code Online (Sandbox Code Playgroud)

知道为什么那是因为我真的不明白吗?

我也尝试过这段代码但结果相同:

var els = document.getElementsByClassName("hidden");

Array.prototype.forEach.call(els, function(el) {
    el.ClassList.remove("hidden");
});
Run Code Online (Sandbox Code Playgroud)

javascript arrays

1
推荐指数
1
解决办法
156
查看次数

为什么 forEach 方法不适用于 HTMLCollection

我正在学习 DOM 操作并有一个 HTML 文档。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1 class="test">
        Title
    </h1>
    <h2 class="test">
        Here is the list of all the programming languages:
    </h2>
    <ul>
        <li>JavaScript</li>
        <li>Python</li>
        <li>Go</li>
    </ul>
    <script>
        const test = document.getElementsByClassName('test');
        test.forEach(item => {
            console.log(item);
        });
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 forEach 方法访问 html 元素,但它给出错误,指出 test.forEach 不是函数。

html javascript dom

0
推荐指数
1
解决办法
267
查看次数