Для анализа HTML страниц использую средства библиотеки MSHTML. Возникла следующая проблема. Если некоторый текст находится непосредственно внутри тэга DIV, например так:
...
<DIV>
...
Привет!
...
</DIV>
...
то он недоступен, по крайней мере мне не удалось получить доступ к нему, даже через свойства innerText, outerText, innerHTML, outerHTML интерфейса IHTMLElement для элемента DIV. Причем объем текста внутри тэга DIV достаточно велик, а выделить необходимо небольшой фрагмент, расположенный между другими тэгами (известно какими), например:
...
<DIV>
...
<BR>
Привет! <!-- это необходимо выделить -->
<B>...</B>
...
</DIV>
...
Если кто знает, как решить проблему, помогите, пожалуйста.
Здравствуйте John_Headlong, Вы писали:
JH>Для анализа HTML страниц использую средства библиотеки MSHTML. Возникла следующая проблема. Если некоторый текст находится непосредственно внутри тэга DIV, например так:
JH>...
JH><DIV>
JH> ...
JH> Привет!
JH> ...
JH></DIV>
JH>...
JH>то он недоступен, по крайней мере мне не удалось получить доступ к нему, даже через свойства innerText, outerText, innerHTML, outerHTML интерфейса IHTMLElement для элемента DIV. Причем объем текста внутри тэга DIV достаточно велик, а выделить необходимо небольшой фрагмент, расположенный между другими тэгами (известно какими)
Может, ты неправильно пытаешься вызвать метод get_innerText? В самом HTML проблем нет:
<html>
<head>
<title>InnerHTML Test</title>
<script language=javascript>
function msg()
{
alert(div1.innerText);
alert(div1.innerHTML);
}
</script>
</head>
<body onload="msg()">
<div id=div1 align =center>Here is your <b>text</b>!</div>
</body>
</html>
Здравствуйте retalik, Вы писали:
R>Может, ты неправильно пытаешься вызвать метод get_innerText? В самом HTML проблем нет:
R>R><html>
R><head>
R><title>InnerHTML Test</title>
R><script language=javascript>
R>function msg()
R>{
R> alert(div1.innerText);
R> alert(div1.innerHTML);
R>}
R></script>
R></head>
R><body onload="msg()">
R><div id=div1 align =center>Here is your <b>text</b>!</div>
R></body>
R></html>
R>
Да, действительно, в IE данный пример работает. Но свой анализатор я писал на Borland Delphi 5. Так вот какие вещи обнаружились. Свойства InnerHTML и OuterHTML у IHTMLElement для элемента DIV пусты, а свойства InnerText и OuterText действительно содержат текст, расположенный внутри элемента DIV. Так что в прошлый раз я был не совсем внимателен.
Однако все это, мягко говоря, не то, что хотелось бы. Тем не менее, спасибо. Дело в том, что, как я уже говорил, объем InnerText довольно велик, а выделить необходимо лишь небольшой фрагмент текста, расположенный непосредственно внутри элемента DIV, скажем, сразу за элементом B. Для этих целей, на самом деле, необходимо использовать объект TextRange. Он доступен в Dynamic HTML, а в MSHTML я нашел соответствующий интерфейс — IHTMLTxtRange. В книге Inside Dynamic HTML by Scott Isaacs нашел описание, как он работает, так что, думаю, проблема решена в принципе. Дело за реализацией, чем сейчас и занимаюсь.