2016-07-26 115 views
0

我正在使用Business Catalyst站點(Adobe)。我需要在每行另一個腳本後面附加信息的行項後插入一個佔位符div。這在大多數瀏覽器上工作正常,但在IE 11上沒有任何操作。Javascript document.contains無法在IE11上工作

該腳本查找insertAfter中的最後一項,即。行包含4個項目,但如果最後一行只有1或2個,則將其插入最後一行之後。

我正在使用jquery 1.1,但只是切換到1.7,它似乎沒有任何區別。

我的標記:

<div class="roller col-md-3" id="roller001"> 
<div class="roller-type"> 
<div class="roller-image"> 
{tag_small image_nolink} 
</div> 
<a class="roller-btn" onclick="appendRoller{tag_itemid}('{tag_itemid}')" href="javascript:void(0);">{tag_name_nolink}</a> 
</div> 
</div> 

<div class="roller col-md-3" id="roller002"> 
<div class="roller-type"> 
<div class="roller-image"> 
{tag_small image_nolink} 
</div> 
<a class="roller-btn" onclick="appendRoller{tag_itemid}('{tag_itemid}')" href="javascript:void(0);">{tag_name_nolink}</a> 
</div> 
</div> 

腳本:

<script type="text/javascript"> 
$(document).ready(function(){ 
var rollerItems = document.getElementsByClassName('roller'); 

    for (n=0; n<rollerItems.length; n++) { 
     if(n%4 == 0) { 
      var rowEnd = rollerItems[n];    
      if(document.contains(rollerItems[n+1])) { rowEnd = rollerItems[n+1]; } 
      if(document.contains(rollerItems[n+2])) { rowEnd = rollerItems[n+2]; } 
      if(document.contains(rollerItems[n+3])) { rowEnd = rollerItems[n+3]; } 
      $('<div class="popup-row"></div>').insertAfter(rowEnd); 
      } 
     } 

}); 
</script> 
+0

由於'rollerItems'是從文檔中檢索的,您爲什麼需要檢查'document.contains'?這不是重言式嗎?你可以簡單地檢查'n + 1> = rollerItems.length' – slebetman

+0

好點。我的想法是我需要一行上的第一個項目來觸發insertAfter,但之後需要檢查該行中是否存在更多的項目,然後插入div,但是我認爲你的方式更好。 –

+0

我正在考慮離開這個解決方案,因爲我無法找到任何有關IE瀏覽器在堆棧溢出document.contains問題... –

回答

2

我已經意識到這個問題是不是與 'insertAfter' 命令,在所有但 'document.contains'。顯然,IE並沒有將'文檔'視爲一個節點,我需要使用'document.body.contains'來確定行尾的項目。

例如,

如果(document.body.contains(rollerItems [N + 1])){rowEnd = rollerItems [N + 1]; }

通過一切行一行,但掩蓋了!不知道這是否是最好的解決方案,但現在至少可以工作。