Javascript Array.filter-breaking safari打印

Javascript Array.filter-breaking safari打印,javascript,jquery,Javascript,Jquery,我有一个打印功能,除了safari之外,它可以在任何地方工作。单击“打印”按钮时,会引发错误: TypeError: 'undefined' is not a function (evaluating 'Array.filter( document.getElementsByClassName('printArea_1'), function(elem){ $(".printing_list").printElement( elem ); })') 破坏我的safari

我有一个打印功能,除了safari之外,它可以在任何地方工作。单击“打印”按钮时,会引发错误:

TypeError: 'undefined' is not a function (evaluating 'Array.filter( document.getElementsByClassName('printArea_1'), function(elem){
        $(".printing_list").printElement( elem );
    })')
破坏我的safari代码的是Array.filter,witch适用于除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 );
        });
}
功能打印列表(项目名称、项目数量){
var theText=“”;

对于(var i=1;i我不确定这在其他浏览器中如何工作。
Array.filter
不存在;您的polyfill创建了
Array.prototype.filter
,这是正确的函数。您可以使用
调用
使其适应类似于数组的对象:

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();

你的函数不应该(也不应该)在其他浏览器中工作。你想要
Array.prototype.filter.call(…)
,而不是
Array.filter(…)
。thg435,你真是个坏蛋!谢谢,你做到了,哈哈。只在FF中可用,我不知道这在其他浏览器中是如何工作的。或者
[].filter.call
获取一个简写,暂时为空数组浪费了一点内存。这是可行的,但它也会打开“打印”对话框5次,然后在打印后使safari崩溃。@user2089255:您的循环应该做什么?我将整个函数添加到描述中,它正在填充要打印的列表中的文本@user2089255:那你为什么要引入循环?你是想一次打印所有
.printing\u list
元素还是一次打印所有
.printparea\u 1
元素?我正在尝试获取所有printparea项目并将它们放在printing\u列表中进行打印,只能进行一次打印。