Получить текст HttpElement - PullRequest
2 голосов
/ 07 февраля 2011
<div id="div1">
    <span>Span text 1</span>
    <span>Span text 2</span>
    Div Inner Text
</div>

Как извлечь только текст div1 (внутренний текст Div)?

div1.innerText возвращает и текст диапазона.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011

Подход, который я выбрал бы для итерации по дочерним узлам, проверки, является ли каждый из них текстовым узлом и сохранен ли он в массиве, а затем возвращал объединенные элементы массива.

  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 будет содержать внутреннее текстовое значение.Это не проверяет, что идентификатор, переданный функции, существует, поэтому для реального приложения потребуются дополнительные проверки.

0 голосов
/ 07 февраля 2011

Есть похожие вопросы относительно извлечения внутреннего текста элемента.

  • Решение 1: см. этот вопрос

    HtmlElement e1 = webBrowser1.Document.GetElementById("elementId");
    string content = e1.InnerText
    MessageBox.Show(content);
    
  • Решение 2: используйте Javascript с использованием HtmlDocument. InvokeScript метод

    В вашем HTML:

    <script type="text/javascript">
        function getInnerText(id) {
           return document.getElementById(id)..innerText;
        }
    </script>
    

    C #

    Object[] objArray = new Object[1];
    objArray[0] = (Object)"elementId";
    string content = webBrowser1.Document.InvokeScript("getInnerText", objArray);
    MessageBox.Show(content);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...