【问题标题】:jQuery: Selecting element after DOM injection (when element is unknown)jQuery:DOM注入后选择元素(当元素未知时)
【发布时间】:2011-02-11 10:18:32
【问题描述】:

是否有一种技巧可以将任意内容注入 DOM,然后在不知道内容是什么的情况下选择该内容?

例子:

function myInjector( _htmlElement ) {
    $('#target').replaceWith(_htmlElement);
    /* Is it possible to then select the injected element here? */
}

感谢您提供的任何建议。

谢谢。

【问题讨论】:

    标签: javascript jquery dom jquery-selectors


    【解决方案1】:

    您不需要选择它 - 您已经在 _htmlElement 变量中存储了对它的引用:

    function myInjector( _htmlElement ) {
        $('#target').replaceWith(_htmlElement);
    
        alert(_htmlElement.parentNode.tagName);
    }
    

    编辑——首先创建新的 jQuery 对象并将其存储在一个变量中:

    function myInjector( _htmlElement ) {
        var newEl = $(_htmlElement);
        $('#target').replaceWith(newEl);
    
        alert(newEl.parent()[0].tagName);
    }
    

    【讨论】:

    • 即使_htmlElement只是一串内容?
    • @Spot: 那么你不应该调用变量_htmlElement ;)
    • @Felix 我不在乎 var 叫什么。这不是问题的重点。
    • @Andy:感谢您的更新。不幸的是,这对我没有帮助,正如在 replaceWidth() 文档页面上看到的那样:“但是,必须注意返回的是原始 jQuery 对象。这个对象是指已从 DOM 中删除的元素,而不是新元素已经取代了它。”
    • @Andy:那里有意外的 CR。 :) 无论如何,我需要 new 内容,而不是现有内容。我可以让用户通过选择器来查找新内容。但在此之前,我想看看是否有办法以更清洁的方式进行。
    【解决方案2】:

    您可以将_htmlElement 包装在$ 中,使其成为一个jQuery 对象。

    function myInjector( _htmlElement ) {
        var element = $(_htmlElement);
        $('#target').replaceWith(_htmlElement);
    
        element.css('color', 'green');
    }
    

    【讨论】:

    • 谢谢,但在这种情况下,htmlElement 是 html 内容的 string(是的,var 名称具有误导性)。
    • @Spot 这没什么区别,至少我的测试表明是这样。
    • 嗯,我希望我能得到和你一样的结果。 :) 那将是我所需要的。很奇怪。你的测试是你上面的确切代码吗?如果有,htmlElement的内容是什么?
    【解决方案3】:
    function myInjector(_htmlElement) {
    var injected = $(_htmlElement);
    $('#target').replaceWith(injected);
    // injected is the reference :)
    };
    

    【讨论】:

    • 谢谢,但在这种情况下 htmlElement 是一串 html 内容(是的,var 名称具有误导性)。
    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 2023-03-27
    • 2013-02-24
    • 1970-01-01
    • 2013-01-06
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多