javascript - 如何检测/选择从 JavaScript/JQuery 创建的元素?

标签 javascript jquery html

我想要Show-Hide通过单击从 JS 代码创建的元素来创建元素。但由于某种原因getElementByIdgetElementsByClassName无法选择这些 HTML 元素。 (请查看演示:http://jsfiddle.net/vy09nnco/)

这是 HTML 代码:

<div id="toShow">Hello World!</div>
<div id="container"></div>

创建<p>元素(将用于显示隐藏)和 appending到容器div :

var code = '<p class="click-me">Click Me!</p>';
$('#container').append(code);

这是完整的 JQuery 代码:

$(document).ready(function () {    
    var code = '<p class="click-me">Click Me!</p>';     
    var divToShow = document.getElementById('toShow');
    var clickMeDiv = document.getElementsByClassName('click-me'); // Here is the problem
    var isOpenedClass = 'isOpened';
    var formIsClosed = true;

    $(clickMeDiv).click(function() {
        $(divToShow).toggleClass(isOpenedClass);
        formIsClosed = false;
    });
    $(clickMeDiv).click(function() {
        if (formIsClosed) {
            $(divToShow).removeClass(isOpenedClass);
        }
        formIsClosed = true;
    })      
    $('#container').append(code);    
}); 

当我使用另一个元素来显示隐藏时,它效果很好(例如: http://jsfiddle.net/vy09nnco/1/ ),这就是为什么问题仅在于选择创建的代码。

感谢您的帮助。

最佳答案

这是因为您在页面加载后创建元素,因此它不在 DOM 中,因此没有附加监听器。您可以向 body (或父元素或其他元素)添加事件监听器以查找新创建的元素:

$("body").on("click", clickMeDiv, function() {

而不是

$(clickMeDiv).click(function() {

FIDDLE

既然你无论如何都在使用 Jquery,那么确实没有理由使用普通的 Javascript。您可以用更少的代码来做这样的事情:

FIDDLE

关于javascript - 如何检测/选择从 JavaScript/JQuery 创建的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27650787/

相关文章:

javascript - Js 数字 - 分数

javascript - 如何导入 400 多个模块,并在我的 angular-cli 项目中迭代它们?

javascript - 悬停时临时调整元素的高度

html - 为什么 wordpress 生成随机 <br> 并错开我的图像

javascript - 在 HTML 中执行拆分 Pane 的最佳方法

javascript - 当值为空时,如何将键/值对添加到 Javascript 对象?

javascript - 如何在 C3 图表中使用稀疏数组?

javascript - 如何在 Javascript $.each 中通过循环将对象添加到数组中?

javascript - 卸载前发送 AJAX 到服务器

javascript - 我有 2 个 UI 选项卡。我需要通过单击该选项卡外的按钮来激活一个特定选项卡