Javascript 无法在节点列表上声明自定义方法。活动节点列表的原型

Javascript 无法在节点列表上声明自定义方法。活动节点列表的原型,javascript,Javascript,有人能指出为什么该示例只适用于静态节点列表方法“querySelectorAll”? 我想创建一个helper函数来帮助迭代活动节点列表中的子节点。但是,如果我尝试对活动节点列表使用dom查询方法,即使用“getElementsById”和getElementsById,我会得到“myList.on不是函数” 我得到的唯一回应是在收集点发现无用的拼写错误 <!DOCTYPE html> <html lang="en"> <head>

有人能指出为什么该示例只适用于静态节点列表方法“querySelectorAll”?

我想创建一个helper函数来帮助迭代活动节点列表中的子节点。但是,如果我尝试对活动节点列表使用dom查询方法,即使用“getElementsById”和getElementsById,我会得到“myList.on不是函数”

我得到的唯一回应是在收集点发现无用的拼写错误

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>NodeList Rocket Science</title>
    <style>
        li {
            list-style: none;
            width: 1em;
            padding: .5em;
            border: 1px solid #000;
            border-radius: 1em;
        }

        li:hover {
            font-weight: bold;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <ul>
        <li class="item">1</li>
        <li class="item">2</li>
        <li class="item">3</li>
    </ul>

    <script>
        // Static NodeList - Works, but not method 'getElementsByClassName' or 'getElementById' for live NodeLists!?
        const $items = document.querySelectorAll('.item')

        // HTMLCollection of a live NodeList, produces "Uncaught TypeError: $items.on is not a function"
        // const $items = [...document.getElementsByClassName('item')]

        console.log('$items', $items)

        NodeList.prototype.on = function (eventType = '', func = () => {}) {
            this.forEach(
                ($item = undefined) =>
                    $item.addEventListener(eventType, func, false)
            )
        }

        const log = (event = {}, eventTarget = event.target) =>
            console.log(`Clicked node ${ eventTarget.tagName } containing ${ eventTarget.textContent }`)

        $items.on('click', log)
    </script>

NodeList火箭科学
李{
列表样式:无;
宽度:1米;
填充:.5em;
边框:1px实心#000;
边界半径:1米;
}
李:悬停{
字体大小:粗体;
光标:指针;
}
  • 1
  • 2
  • 3
//静态节点列表-对活动节点列表有效,但方法'GetElementsByCassName'或'getElementById'无效!? const$items=document.querySelectorAll('.item') //活动节点列表的HTMLCollection生成“未捕获类型错误:$items.on不是函数” //const$items=[…document.getElementsByClassName('item')] console.log('$items',$items) NodeList.prototype.on=函数(eventType='',func=()=>{}){ 这是forEach( ($item=未定义)=> $item.addEventListener(事件类型,函数,false) ) } const log=(event={},eventTarget=event.target)=> log(`Clicked node${eventTarget.tagName}包含${eventTarget.textContent}`) $items.on('click',log)
您正在创建
AddEvent()
,但调用
AddEvent()
-注意大小写的区别。

代码存在多个问题

NodeList.prototype.AddEvent=函数(func){
for(设i=0;i

名单组

addEvent
!==
AddEvent
@DarkCodeWiz JavaScript区分大小写。@DarkCodeWiz-请参阅答案。@Utkanos在向NodeList添加原型时,您熟悉此错误吗?不明确,但大小写问题是第一个问题。之后还有任何补充问题。@gurdvinder372.querySelectorAll()可以工作,但不能工作。GetElementsByCassName(…)[0]、getElementsByTagName(…)[0]或getElementById(…)-为什么只在静态节点列表上工作?