Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8未能添加.append()jquery对象_Javascript_Jquery_Internet Explorer_Cross Browser - Fatal编程技术网

Javascript IE8未能添加.append()jquery对象

Javascript IE8未能添加.append()jquery对象,javascript,jquery,internet-explorer,cross-browser,Javascript,Jquery,Internet Explorer,Cross Browser,我编写此函数是为了使列可排序。我想根据特定订单号重新排列相关的div。它在chrome和firefox中运行良好,但出于某种原因,在IE8中,所有内容都会消失,而不是在函数结束时,将所有重新排列的内容添加到#current_orders_content2div中。该函数在JSlint(通过jsfiddle)中检出,奇怪的是,查看最后的所有值(通过IE控制台),所有看起来都正常的值都是我所期望的值。似乎append()失败了。因此,我使用.html(),appendTo进行了测试,但仍然没有任何乐

我编写此函数是为了使列可排序。我想根据特定订单号重新排列相关的div。它在chrome和firefox中运行良好,但出于某种原因,在IE8中,所有内容都会消失,而不是在函数结束时,将所有重新排列的内容添加到
#current_orders_content2
div中。该函数在JSlint(通过jsfiddle)中检出,奇怪的是,查看最后的所有值(通过IE控制台),所有看起来都正常的值都是我所期望的值。似乎
append()
失败了。因此,我使用
.html()
appendTo
进行了测试,但仍然没有任何乐趣。如果我给它传递一个html字符串,它就可以工作,但是这些jquery对象失败了

关于我为什么或者如何让它工作,有什么想法吗

谢谢

$('.sortable').click(function () {
    "use strict";
    if ($(this).hasClass('sortable_numeric')) {

        /*
        *function sets ascending/descending classes
        *for formatting, placement of arrow_up.png, arrow_down.png
        *returns the sort order to be used below "asc" or "desc"
        */
        var sort_order = sort_class_distribution($(this));
        var current_val = "";
        var order_number = "";

        /*
        *determine what column is being sorted
        *remove the "_header" text from the id to
        *get this information
        */
        var sort_column = this.id;

        sort_column = sort_column.replace("header_", "");

        /*
        *append "_div" to the end of the string to get
        *the class of the divs we are sorting by
        */
        sort_column += "_div";

        var valuesArr = [];

        $('.' + sort_column).each(function () {

            var current_val = $.trim($(this).text());

            current_val = parseInt(current_val, 10);

            valuesArr.push(current_val);

        });


        var sorted = [];

        if (sort_order == "asc") {

            sorted = valuesArr.slice(0).sort(sortA);


        } else if (sort_order == "desc") {

            sorted = valuesArr.slice(0).sort(sortD);

        }

        /*
        * for each item in this array, get the parent div 
        * with the class order_and_lines_container_div. 
        * 
        * push it into an array of its own to to put back 
        * onto the page in the order of the sorted array
        */

        var containerArr = [];
        var current_container = "";
        var c = 0;

        for ( c = 0; c <= sorted.length; c++ ) {

            current_container = $('#order_container_' + sorted[c]);

            containerArr.push(current_container);

        }

        $('#currentOrdersContent2').html('');

        for ( c = 0; c <= sorted.length; c++ ) {

            $('#currentOrdersContent2').append(containerArr[c]);

        }

    }

});
$('.sortable')。单击(函数(){
“严格使用”;
if($(this).hasClass('sortable_numeric')){
/*
*函数集升序/降序类
*对于格式,请放置arrow\u up.png和arrow\u down.png
*返回要在“asc”或“desc”下使用的排序顺序
*/
var sort_order=sort_class_分布($(this));
当前var_val=“”;
var order_number=“”;
/*
*确定要排序的列
*将“_头”文本从id中删除到
*获取此信息
*/
var sort_column=this.id;
排序列=排序列。替换(“标题列”);
/*
*将“_div”追加到字符串的末尾以获取
*我们正在排序的div的类别
*/
排序列+=“\u div”;
var估价师=[];
$('..+排序列)。每个(函数(){
var current_val=$.trim($(this.text());
当前值=parseInt(当前值,10);
估价师推送(当前值);
});
var排序=[];
如果(排序顺序=“asc”){
sorted=valuesArr.slice(0).sort(sortA);
}else if(排序顺序=“desc”){
排序=valuesArr.slice(0).sort(sortD);
}
/*
*对于此数组中的每个项,获取父div
*使用类order_和_line_container_div。
* 
*将其推到自己的阵列中以放回
*按排序数组的顺序显示在页面上
*/
var containerArr=[];
var current_container=“”;
var c=0;

对于(c=0;c我不知道这是否是问题所在,但您的循环超出了范围

这个

for ( c = 0; c <= sorted.length; c++ ) {
有些变化是

  • 删除了一堆不必要的变量声明(隐藏或未使用)

  • 使用
    .map()
    。这只是迭代元素,并将您提供的任何内容作为
    返回值放入新的jQuery对象中,因此最终得到一个充满数字的jQuery对象

  • 删除了
    $.trim()
    ,因为
    parseInt
    忽略前导/尾随空格

  • 使用
    .toArray()
    将新的jQuery对象转换为实际数组

  • 立即调用
    .sort()
    ,并将返回值赋给变量,因为它返回相同的数组(尽管已修改)

  • 此时,只需对每个项目执行
    .append()
    。追加时,元素将从其原始位置移除,并放置在新位置,因此无需缓存和清除元素

.map().toArray().sort()
只是方法链接。
.map()
返回如上所述的新jQuery对象。
.toArray()
对该对象调用,并返回一个数组。
对该数组调用.sort()
,并返回分配给变量的相同数组


此部分
排序顺序==“asc”?sortA:sortD
是一个条件运算符,它就像是一个
if…else
的简写。基本上,如果条件为真,返回
sortA
,else返回
sortD

你的HTML中有DOCTYPE集吗?尝试一下,否则我们可以看到整个HTML吗?可能是由于一个坏了的HTML。不,不起作用。。我不认为html绝对没有被破坏。我的意思是,当页面加载时,它呈现得很好。有了破坏的html,我的意思是它可能有一个非关闭的标记或类似的东西,其他浏览器会为你修复,但IE8不会。@thomas:你是说“代码比需要的更多”?我看到的第一件事是,结尾不应该有两个循环。为什么不使用
$(“#currentOrdersContent2”)将其合并在一个循环中。追加($(“#order_容器+sorted[c]);
@thomas:我正在进行一个极端的代码缩减
。它将不经过测试,如果您不喜欢这样密集的代码,您可以展开(或忽略)更改。我会在几分钟后通知您。同时,循环约束是否有助于解决问题?太好了!我很想看看它是如何更专业地完成的。拆分它们的唯一一点是,第一个循环按顺序取出div,然后是主容器div(
#currentOrders2
)清除后,新订购的div将被放回。因此,尝试合并它们有点困难。但我正在努力。@thomas:它们是从一个容器移动到另一个容器,还是在同一个容器中重新排列?在一个容器中重新排列。
 // -----------v---constrain to indices less than sorted.length
for ( c = 0; c < sorted.length; c++ ) {
$('.sortable').click(function () {
    "use strict";
    if ($(this).hasClass('sortable_numeric')) {

        var sort_order = sort_class_distribution($(this)),
            sort_column = this.id.replace("header_", "") + "_div",
            content2 = $('#currentOrdersContent2');

        var sorted = $('.' + sort_column).map(function () {
                return parseInt($(this).text(), 10);
            })
            .toArray()
            .sort(sort_order == "asc" ? sortA : sortD);

        $.each(sorted, function(i, item) {
            content2.append($('#order_container_' + item));
        });
    }
});