1

我用 jQuery 函数构建循环的 html。

$.append()我想用,$.before()$.after()等给我的函数更多的灵活性。

目前,我做类似的事情

$.fn.appendRecurringHTML = function(domInsertMethod, domInsertID, htmlToInsert) {
    if(domInsertMethod == 'append'){
        $(domInsertID).append(htmlToInsert);
    }
    else if(domInsertMethod == 'before'){
        $(domInsertID).before( ...
}

但我更喜欢(伪)

$.fn.appendRecurringHTML = function(domInsertMethod, domInsertID, htmlToInsert) {
    $(domInsertID).window[domInsertMethod](htmlToInsert);
}

但这对我不起作用。

这可能吗?如果是这样,怎么做?

4

2 回答 2

2

只需使用

$(domInsertID)[domInsertMethod](htmlToInsert);

演示:http: //jsfiddle.net/UZKLY/

这是有效的,因为$(domInsertID)(或任何$())的结果是一个 jQuery对象,因此它具有您要调用的属性和方法。通常,您使用点表示法来访问它们,但括号表示法同样有效。括号表示法是动态获取属性/方法的唯一方法(并允许无效的标识符字符)。

但要小心,因为从技术上讲,可以提供任何方法名称,因此可以调用。因此,是否允许由您决定。

就目前而言,添加 to 没有意义$.fn,因为您实际上并没有使用选择器中的选定元素。使用此设置对我来说更有意义:

$.appendRecurringHTML = function(domInsertMethod, domInsertID, htmlToInsert) {
    $(domInsertID)[domInsertMethod](htmlToInsert);
};

你会这样称呼它:

$.appendRecurringHTML("after", "#id", "html");

但是,如果您想使用选定的元素作为目标,您可以使用:

$.fn.appendRecurringHTML = function(domInsertMethod, htmlToInsert) {
    return this.each(function () {
        $(this)[domInsertMethod](htmlToInsert);
    });
};

并称它为:

$("selector").appendRecurringHTML("after", "html");

演示:http: //jsfiddle.net/UZKLY/1/

它保留了链接,并将应​​用于所有匹配的元素。

于 2013-06-06T13:46:33.610 回答
1

试试这个:

$(domInsertID)[domInsertMethod](htmlToInsert);

这种方法首先使用您的domInsertID创建 jQuery 对象。然后从该对象的原型链中选择domInsertMethod并使用htmlToInsert执行该方法。

于 2013-06-06T13:44:56.150 回答