2013-04-24 3 views
1

Я новичок в переполнении стека, а также в JavaScript. Итак, прежде всего, привет всем и заблаговременно за вашу помощь.Не удается использовать innerHTML

Я использую Incomedia Website X5 Evolution для создания сайта. На одной из страниц я хочу заполнить таблицу данными с сервера. Итак, я создал таблицу и вставляю в каждую ячейку этот код HTML:

<!--#0000,0000--> 

Значения представляют строку и столбец. Мне удалось написать javascript, чтобы изменить значение каждой ячейки. Но когда я хочу заменить содержимое HTML-пахе, используя innerHTML, он не работает. Тем не менее, все кажется правильным, поскольку старый и новый html-контент один и тот же. Даже если я снова использую исходную переменную, она все равно не работает.

Не могли бы вы рассказать мне, где проблема, пожалуйста?

Здесь Javascript код:

<script> 

var i; 
var div = document.getElementById('imTableObject_1'); 
div = document.getElementsByTagName('table'); 
var htmlContent = div[0].innerHTML; 
var newHtmlContent = div[0].innerHTML; 
var test = div[0].innerHTML; 
var row,col; 

//I can't understand why the scrip stop running at this line. I didn't change anything... 
div[0].innerHTML = newHtmlContent ; 

for (i=htmlContent.length - 5; i > -1; i--) { 

if(htmlContent.charAt(i)=='#') { 

    //alert(i); 
    //alert(htmlContent.substring(i+6,i+10)); 
    row = parseInt(htmlContent.substring(i+1,i+5));  
    col = parseInt(htmlContent.substring(i+6,i+10)); 

    newHtmlContent = insertText(row,col,newHtmlContent,i); 
}; 
}; 

alert(div[0].innerHTML); 
alert(newHtmlContent); 

//This does not work 
div[0].innerHTML = newHtmlContent ; 

alert("Done !"); 



function insertText (row, col, text, index) { 

var length; 
var newText; 

length = getTextLength (text,index + 13); 

//alert(htmlContent.substring(index+13,index+13+length)); 

newText = text.substring(0,index+13); 
newText += "Titi too !"; 
newText += text.substring(index+13+length,text.length); 

//alert(newText); 

return newText ; 

} 

function getTextLength (text,startIndex) { 

var i = 0; 

for(i = startIndex ; i < text.length ; i++) { 

    //alert(text.substring(i,i+7)); 

    if(text.substring(i,i+7) == "</span>") { 

     return i - startIndex ; 
    }; 
}; 

return -1; 
} 

</script> 
+1

Вы уверены, что 'если (htmlContent.charAt (я) == '#') {' это всегда так? И что окружение 'for' работает правильно? – Ian

+0

Что вы получаете от оповещений? –

+0

также, вы могли бы также включить HTML? это может помочь –

ответ

0

Вы установили:

var newHtmlContent = div[0].innerHTML; 

И потом:

div[0].innerHTML = newHtmlContent ; 

Вы устанавливаете его содержание к тому, что его содержание уже было. Следовательно, никаких изменений не происходит.

+0

Сначала да, но позже они выполняют 'newHtmlContent = insertText (строка, col, newHtmlContent, i);' и затем вызывают 'div [0] .innerHTML = newHtmlContent;' снова – Ian

0

Изменение 3-й строки в

div = document.getElementsByTagName('td'); 

искать <td> теги вместо <table> тегов. <table> s не может напрямую хранить текстовые данные, поэтому я думаю, их innerHTML не работает должным образом.

мне удалось заставить его работать здесь: http://jsfiddle.net/mgabor/ZMaW6/1/