0

我有一个打印功能,可以在除 safari 之外的所有内容中使用。单击打印按钮时,会引发错误:

TypeError: 'undefined' is not a function (evaluating 'Array.filter( document.getElementsByClassName('printArea_1'), function(elem){
        $(".printing_list").printElement( elem );
    })')

破坏我的 safari 代码的是一个 Array.filter,除了 safari 之外,女巫在所有方面都有效:

Array.filter( document.getElementsByClassName('printArea_1'), function(elem){
    $(".printing_list").printElement( elem );
});

我尝试添加一段代码,它应该可以与 safari 一起使用,但没有。谁能帮我让它工作,或者帮我写一些可以用在所有浏览器中都可以用的东西来代替它的东西?

这是我的完整打印功能

function print_list(item_names,number_of_items) {
    var theText="<ol>";
    for(var i=1; i<=number_of_items;i++){
        if($("#" + item_names + "_" + i).val()!=''){
        theText+="<li>"
        theText+=$("#" + item_names + "_" + i).val();   
        theText+="</li>";

        }

    }
    theText +="</ol>";
    $("#print_content_area").html(theText);
        Array.prototype.filter.call( document.getElementsByClassName('printArea_1'), function(elem){
            $(".printing_list").printElement( elem );
        });
}
4

1 回答 1

2

我不确定这在其他浏览器中是如何工作的。Array.filter不存在;您的 polyfill 创建Array.prototype.filter,这是正确的功能。您可以使用.call它来适应类似数组的对象:

Array.prototype.filter.call( document.getElementsByClassName('printArea_1'), function(elem){
    $(".printing_list").printElement( elem );
});

但这filter不是正确的功能吗?forEach是。

还有……你有 jQuery 吗?

$('.printArea_1').each(function() {
    $('.printing_list').printElement(this);
});

看来您也应该缓存$('.printing_list')


所以你想这样做吗?

$('.printing_list').append($('.printArea_1')).printElement();
于 2013-07-31T21:28:34.523 回答