【问题标题】:jQuery: How to modify loaded content from inside load callbackjQuery:如何从内部加载回调修改加载的内容
【发布时间】:2013-03-06 17:39:24
【问题描述】:

我正在动态创建许多 div 元素(行)。每行都将具有相同的基本格式,只有文本更改。由于行结构很复杂,我尝试从静态 html 文件加载“基本”div,然后在加载后,使用每行的参数调整一些属性。 (类似于 Android 的 xml 定义的适配器)。我正在使用 jQuery 和 jQuery Mobile。

我多次调用此函数(每行一次)。在每次调用时,我都将一个 params 对象作为参数传递,其中包含该行的数据,以及一个新创建的 div 元素(使用 document.createElement("div") 创建):

    function loadRow(params, div){  
        var $div = $(div);        

        $div.load("some_page.html [data-custom-role=row]", function(){
            //FIXME Throws error: object is not a function!!
            var nameElement = $div("[data-custom-role=name]");
            nameElement.text(params.name);
        });
    }


此代码在 FIXME 注释下方的第一行中引发此错误:

Uncaught type Error: object is not a function


源 html 文件 (some_page.html) 的(简化)内容:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="ISO-8859-1"> 
        </head>
        <body>
            <div data-custom-role="row">
                <p data-custom-role="name"></p>
            </div>
        </body>
    </html>

我要做的是选择新加载的 div 中的“p”元素,并设置文本内容。我不能使用 id 来识别“p”元素,因为我稍后会将所有行注入页面,并且不能存在 2 个具有相同 id 的元素。这就是为什么我需要使用一个属性作为选择器,但是由于同时加载了许多行,我需要确保我只调整我正在加载的 div 内的“p”元素,而不是其他行分区。我认为变量 $div 将在回调中可用,因为创建了一个闭包。

我做错了什么?如何在回调中查询和修改加载的内容?

提前致谢。

【问题讨论】:

    标签: javascript jquery html callback load


    【解决方案1】:

    您正在引用包含函数但不是函数的 DOM 元素。

    你不能使用$div(),你需要在你的情况下使用对象的函数.find()来找到具有data-custom-role=name属性的元素

    试试看:

       function loadRow(params, div){  
            var $div = $(div);        
    
            $div.load("some_page.html [data-custom-role=row]", function(){
                $div.find("[data-custom-role=name]").html(params.name);
            });
        }
    

    【讨论】:

    • 我不需要获取属性,我需要选择属性具有一定值的元素,然后在这个元素上,设置内部文本。
    • 好的,所以$div.find("[data-custom-role=name]").html(params.name);$("[data-custom-role=name]").html(params.name);
    • 是的,这解决了错误。我改用了$div.children,但没有附加任何内部文本。按照您的建议使用 find 代替。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多