2011-07-21 39 views
1

我有以下的JavaScript代码在我的网页排序的div:jQuery .appendTo(element)不能在所有IE版本中工作?

$(function() { 

    var productContainer = $('.productBoxWrapper'); 

    function sortByPriceAsc (a,b){ 
     return Number(jQuery(a).find('.productPriceForSorting').text() - $(b).find('.productPriceForSorting').text()); 
    } 

    function sortByPriceDesc (a,b){ 
     return Number($(b).find('.productPriceForSorting').text() - $(a).find('.productPriceForSorting').text()); 
    } 

    function sortByTitleAsc (a,b){  
     return $(a).find('.productTitleForSorting').text() > $(b).find('.productTitleForSorting').text() ? 1 : -1;  
    } 

    function sortByTitleDesc (a,b){ 
     return $(b).find('.productTitleForSorting').text() > $(a).find('.productTitleForSorting').text() ? 1 : -1; 
    } 

    function reorderEl(el){ 
     var allProductsContainer = $('#product-collection'); 
     allProductsContainer.html(''); 
     el.each(function(){   
      $(this).appendTo(allProductsContainer);   
     }); 
    } 
    function fadeContainer() { 
     productContainer.fadeOut('fast'); 
     productContainer.fadeIn('fast'); 
    }  

    $('.dk').dropkick({ 

      change: function() { 

      var selectedOptionValue = $('#sortThisCollectionBaby option:selected').val(); 

      if (selectedOptionValue == 'price-low-to-high') 
      { 
       reorderEl(productContainer.sort(sortByPriceAsc)); 
       fadeContainer(); 
      } 
      else if (selectedOptionValue == 'price-high-to-low') 
      { 
       reorderEl(productContainer.sort(sortByPriceDesc)); 
       fadeContainer(); 
      } 
      else if (selectedOptionValue == 'alphabetically-a-to-z') 
      { 
       reorderEl(productContainer.sort(sortByTitleAsc)); 
       fadeContainer(); 
      } 
      else if (selectedOptionValue == 'alphabetically-z-to-a') 
      { 
       reorderEl(productContainer.sort(sortByTitleDesc)); 
       fadeContainer(); 
      } 
      else if (selectedOptionValue == 'best-selling') 
      { 
       window.location.reload(true); 
       fadeContainer(); 
      } 
      } // function  

    }); // dropkick 

    }); 

HTML:

<ul id="product-collection"> 

    <div class="productBoxWrapper">   
     <li> 
    <div class="product-info"> 
     <h4> 
      <a class="productTitleForSorting" href="my-product">MY PRODUCT</a><br> 
     </h4> 
     <div class="product-price"> 
     <span id="listPrice">Retail: $26.99</span>              
      <span style="display:none;" class="productPriceForSorting">895</span> 
      <span>Our Price: $8.95</span> 
     </div>     
    </div>    
    </li> 
    div class="productBoxBottom">   

    <!-- view product button --> 
    <a href="my-product">View</a>      
    </div> 
    </div> 

    <!-- I HAVE MORE DIVS FOR OTHER PRODUCTS HERE, SAME HTML AS ABOVE --> 

    </ul> 

此排序功能的工作原理以及在所有的浏览器,但不是在所有的IE浏览器(IE所有版本)。当我通过更改选择列表选项(调用排序功能)来运行脚本时,所有内容都会在IE中消失。看起来它可能与jQuery的.appentTo(元素)在IE或东西不工作的reorderEL功能的问题:

function reorderEl(el){ 
var allProductsContainer = $('#product-collection'); 
allProductsContainer.html(''); 
el.each(function(){   
    $(this).appendTo(allProductsContainer);   
}); 

}

没有人有在这一个解决办法的建议?

+0

我得说,'jQuery()'标记使硬读。如果你使用'$()',读取会容易得多。 – Tomm

+0

谢谢Tomm正在改变现在......忘了...... – IntricatePixels

+0

@Tomm对于我们中的一些人来说,我们有多个框架,不能这样做。一旦你习惯了,它不难阅读。 –

回答

2

,在跳出我的事情:

function reorderEl(el){ 
    var allProductsContainer = $('#product-collection'); 
    allProductsContainer.html(''); 
    el.each(function(){   
     $(this).appendTo(allProductsContainer);   
    }); 
} 

可以改写为:

function reorderEl(el){ 
    $("#product-collection").empty().append(el); 
} 

此外,你应该重做的动画渐变:

productContainer.fadeOut("fast", function() { 
            reorderEl(productContainer.sort(sortByPriceAsc)); 
            productContainer.fadeIn(); 
           }); 

这样,它淡出,然后重新排序内容,然后淡入。fadeOut()将立即返回,它不会等待动画t o完成,因此必须提供回调函数。

+0

丹尼斯,非常感谢!那就是诀窍。它现在也适用于IE。清除reorderEl函数的功能! :)同样的事情褪色,它现在更有意义的视觉。 – IntricatePixels

+0

我做了一些更多的DOM操作,你可能甚至不需要empty()调用。 append()会将其添加到新父项之前从当前分离一个元素。 – Dennis