我有JavaScript代碼,似乎在Chrome,Firefox和Safari的工作,但無法在IE中工作,由於一些變量是「未定義」,但如果你看我的代碼你會看到變量被正確賦值。我覺得它與它的定義範圍有關,但我不想在嘗試修復IE時破壞其他瀏覽器的代碼。這個問題發生在IE11和IE8中,但我沒有測試其他版本的IE來驗證。Js變量未定義在IE後定義
function resizeCommentBox(obj,i){
var lastItemCounter = obj[i].getElementsByTagName('tr').length - 1;
var lastRow = obj[i].getElementsByTagName('tr')[lastItemCounter];
var nextCommentBox = obj[i+1].getElementsByTagName('table')[0];
console.log("lastRow.parentElement right outside the first conditional if(obj[i].offsetHeight < obj[i].scrollHeight): ");
console.log(lastRow.parentElement);
if(obj[i].offsetHeight < obj[i].scrollHeight){
if(!(i+2 < obj.length)){
var template = document.getElementById('lastPageTemplate');
var parentNode = template.parentNode;
template.style.display="block";
template.removeAttribute("id");
parentNode.innerHTML = parentNode.innerHTML + template.outerHTML;
parentNode.children[parentNode.children.length-1].setAttribute('id','lastPageTemplate');
parentNode.children[parentNode.children.length-1].style.display="none";
parentNode.children[parentNode.children.length-1].innerHTML = parentNode.children[parentNode.children.length-1].innerHTML;
}
console.log("lastRow.parentElement right outside the conditional if(lastRow.childElementCount > 0): ");
console.log(lastRow.parentElement);
if(lastRow.childElementCount > 0){
nextCommentBox.innerHTML = lastRow.outerHTML + nextCommentBox.innerHTML;
lastRow.parentElement.removeChild(lastRow);
}
else{
lastRow.parentElement.removeChild(lastRow);
}
if(nextCommentBox.getElementsByTagName('tr')[nextCommentBox.getElementsByTagName('tr').length-1].innerHTML === ""){
nextCommentBox.getElementsByTagName('tr')[nextCommentBox.getElementsByTagName('tr').length-1].parentElement.removeChild(nextCommentBox.getElementsByTagName('tr')[nextCommentBox.getElementsByTagName('tr').length-1]);
}
resizeCommentBox(obj,i);
}
else{
try{
var lastPageOnlyFooter = document.getElementsByClassName('keepOnLastPageOnly');
for(var j = 0; j < lastPageOnlyFooter.length - 2; j++){
lastPageOnlyFooter[j].parentElement.removeChild(lastPageOnlyFooter[j]);
}
}
catch(err){
console.log(err);
}
return false;
}
}
function checkCommenBox(elementCounter){
var commentBoxCollection = document.getElementsByClassName('comments');
resizeCommentBox(commentBoxCollection,elementCounter);
commentBoxCollection[elementCounter].style.height = "auto";
if(elementCounter < commentBoxCollection.length){
checkCommenBox(elementCounter + 1);
}
}
checkCommenBox(0);
是守失敗的變量是LASTROW和nextCommentBox,但他們在函數的開始被定義。我現在還不能包裹我的頭,這是爲什麼它可以在許多瀏覽器上運行,但IE無法找到變量?感謝您的幫助和建議。
編輯15年8月31日
我把IE控制檯的一些截圖顯示的確切錯誤。如您所見,刪除方法沒有被調用,因爲引用爲空。在這種情況下,調用的引用是變量lastRow,它是一個錶行元素。
檢查我的代碼,我們發現第一removeChild之函數被調用的lastRow.parentElement它確實存在:
lastRow.parentElement.removeChild(lastRow);
,做外的條件和console.logs在removeChild函數被調用之前,我們看到元素指針剛剛消失。
我換的innerHTML上表引用的的appendChild和removeChild之功能,但仍無法在IE瀏覽器。
'elementCounter'被用作從零開始的索引。但是你將它與一個基於的長度進行比較。當到達最後一個元素時,if條件仍然滿足,並且調用具有未定義索引的checkCommenBox(超出邊界)。這發生在所有瀏覽器中。 – Andreas