Подход, который я выбрал бы для итерации по дочерним узлам, проверки, является ли каждый из них текстовым узлом и сохранен ли он в массиве, а затем возвращал объединенные элементы массива.
function innerText(element){
var i, text = [], child = null;
for(i = 0; i < element.childNodes.length; i++){
child = element.childNodes[i]
if (child.nodeType === 3 &&
child.nodeValue.match(/[^\n\s\t\r]/)){
text.push(child.nodeValue);
}
}
return text.join("");
}
// Example call
alert(innerText(document.getElementById("div1")));
Приведенный выше код использует свойство nodeValue объекта DOMElements, чтобы проверить, является ли узел текстовым узлом (nodeValue === 3) и что этот элемент содержит больше, чем пробел.Результат можно убрать, обрезав начальные и конечные пробелы.
Редактировать: C # использовать
Используя код Яника в качестве шаблона, как это кажется прямым.Обновите функцию JavaScript до;
function innerText(id){
var i, text = [], child = null, element = document.getElementById(id);
for(i = 0; i < element.childNodes.length; i++){
child = element.childNodes[i]
if (child.nodeType === 3 &&
child.nodeValue.match(/[^\n\s\t\r]/)){
text.push(child.nodeValue);
}
}
return text.join("");
}
Затем ее можно вызвать с помощью:
string content =
(string)webBrowser1.Document.InvokeScript("innerText",
new string[] { "div1" });
Переменная content
будет содержать внутреннее текстовое значение.Это не проверяет, что идентификатор, переданный функции, существует, поэтому для реального приложения потребуются дополнительные проверки.