我试图摆脱JQuery。

我有一个名为“ clientProfiles”的div

<div class="paperlist" data-role='listview' data-inset='true' data-split-icon='delete' id='clientProfiles'></div>


我的应用程序将使用类似的按钮填充“ div”。

function getClientHtml(device) {

                var html = "";
                html += '<div data-name="' + device.Name + '" data-id="' + device.Id + '"data-app="' + device.AppName + '" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">';
                html += '<img style="float-left; width:3%;" src="' + deviceNameImage(device.Name) + '"/>';
                html += '<div class="listItemBody">';
                html += '<h3 class="listItemBodyText">' + device.Name + ' - ' + device.AppName + '</h3>';
                html += '</div>';
                html += '<i class="md-icon btnDeleteProfile" data-index="0">close</i>';
                html += '</div>';
                html += '<br />';
                return html;
            };


用户添加按钮后的html如下所示:

<div class="paperlist" data-role="listview" data-inset="true" data-split-icon="delete" id="clientProfiles">
<div data-name="Xbox One" data-id="mcX7xXZksA1fJooKY2SRS5soNbFgM4lQurFx3bxr2s" data-app="Theater" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">
<img style="float-left; width:3%;" src="../images/devices/xboxone.png"><div class="listItemBody"><h3 class="listItemBodyText">XBLAHBLAHNAME</h3>
</div>
<i class="md-icon btnDeleteProfile" data-index="0">close</i>
</div>
<br>
</div>


这些动态创建的按钮可以通过单击主按钮中标有的类(称为.btnDeleteProfile)的图标从页面中删除。

当我想在JQuery的'btnDeleteProfile'中添加点击事件时,可以使用以下方法:

 $('#clientProfiles', page).on('click', '.btnDeleteProfile', function () {});


但是,由于我现在不使用JQuery,所以我遇到了针对'.btnDeleteProfile'的问题。

document.querySelector('。btnDeleteProfile')。addEventListener('click',function(){});

但是MDN表示,querySelector只会找到它的第一个实例,并且很可能会创建大量的这些按钮,并附加了不同的配置文件信息。

查询选择器找不到“ btnDeleteProfile”。

我遇到的错误是“无法将点击事件添加为null。

最佳答案

您可以使用:


  Event​.target:Event接口的target属性是对调度事件的对象的引用。


片段:



function getClientHtml(device) {

    var html = "";
    html += '<div data-name="' + device.Name + '" data-id="' + device.Id + '"data-app="' + device.AppName + '" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">';
    html += '<img style="float-left; width:3%;" src="../images/devices/xboxone.png"/>';
    html += '<div class="listItemBody">';
    html += '<h3 class="listItemBodyText">' + device.Name + ' - ' + device.AppName + '</h3>';
    html += '</div>';
    html += '<i class="md-icon btnDeleteProfile" data-index="0">close</i>';
    html += '</div>';
    html += '<br />';
    return html;
}

 var clientProfiles = document.querySelector('#clientProfiles');

clientProfiles.innerHTML += getClientHtml({Name: 'Xbox One', id: "mcX7xXZksA1fJooKY2SRS5soNbFgM4lQurFx3bxr2s", AppName: 'Theater'});
clientProfiles.addEventListener('click', function(e) {
    if (e.target.classList.contains('btnDeleteProfile')) {
        e.target.closest('div').remove();
        console.log('Do it');
    }
})

<div class="paperlist" data-role="listview" data-inset="true" data-split-icon="delete" id="clientProfiles">
    <div data-name="Xbox One" data-id="mcX7xXZksA1fJooKY2SRS5soNbFgM4lQurFx3bxr2s" data-app="Theater" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">
        <img style="float-left; width:3%;" src="../images/devices/xboxone.png"><div class="listItemBody"><h3 class="listItemBodyText">XBLAHBLAHNAME</h3>
    </div>
        <i class="md-icon btnDeleteProfile" data-index="0">close</i>
    </div>
    <br>
</div>

关于javascript - Jquery的JavaScript querySelector版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56400619/

10-12 04:57