MSHTML
От: John_Headlong  
Дата: 22.07.02 13:25
Оценка:
Для анализа HTML страниц использую средства библиотеки MSHTML. Возникла следующая проблема. Если некоторый текст находится непосредственно внутри тэга DIV, например так:

...
<DIV>
...
Привет!
...
</DIV>
...

то он недоступен, по крайней мере мне не удалось получить доступ к нему, даже через свойства innerText, outerText, innerHTML, outerHTML интерфейса IHTMLElement для элемента DIV. Причем объем текста внутри тэга DIV достаточно велик, а выделить необходимо небольшой фрагмент, расположенный между другими тэгами (известно какими), например:

...
<DIV>
...
<BR>
Привет! <!-- это необходимо выделить -->
<B>...</B>
...
</DIV>
...

Если кто знает, как решить проблему, помогите, пожалуйста.
Re: MSHTML
От: retalik www.airbandits.com/
Дата: 23.07.02 02:25
Оценка:
Здравствуйте 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>
Успехов,
Виталий.
Re[2]: MSHTML
От: Аноним  
Дата: 25.07.02 13:01
Оценка:
Здравствуйте 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 нашел описание, как он работает, так что, думаю, проблема решена в принципе. Дело за реализацией, чем сейчас и занимаюсь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.