如何获取选定部分的HTML

其实这个程序很简单,首先是如何获取选定部分的HTML,还记得这段吗:

HTMLDoc := WebBrowser1.Document as IHTMLDocument2;
  SelectRange := HTMLDoc.selection.createRange() as IHTMLTxtRange;

这样 SelectRange.htmlText 就是选择部分的HTML了。

接着来实现 TrimBBSText() 函数,用于去除复制文字中的不可见乱码。

1 {******************************************
 2  *
 3  *  TrimBBSText() 伪代码
 4  *
 5  ******************************************}
 6 function TrimBBSText(aBBSStr: String): String;
 7 var
 8   tmpStr, tmpSub: String;
 9   iCharPos: Integer;
10 begin
11   iCharPos := 1;
12   // 从tmpStr的第一个字符到最后一个
13   while (iCharPos <= Length(tmpStr)) do
14   begin
15     case tmpStr[iCharPos] of  // 检查当前字符
16 
17       ‘<‘:   {-HTML标记处理-}
18         begin
19           // 取标签内容
20           tmpSub := HTML标签内容;
21 
22           if ( 是<BR> ) then
23           begin
24             Result := Result + #13#10;    // 换成换行符 CRLF = #13#10
25             Continue;
26           end;
27 
28           // 第一种隐藏方式,SPAN标签加 DISPLAY: none
29           if ( 是<SPAN style="DISPLAY: none"> ) then
30           begin
31             // 跳过直到SPAN标签结束
32             Continue;
33           end;
34 
35           // 第一种隐藏方式,字体大小 font-size: 0px;
36           if ( 是<FONT style="font-size: 0px; "> ) then
37           begin
38             // 跳过直到FONT标签结束
39             Continue;
40           end;
41 
42           // 其他标签处理
43           Continue;
44         end;
45 
46       ‘&‘:   {-转义字符处理-}
47         begin
48           tmpSub := 取转义字符内容;
49           // &nbsp; - 空格
50           if (tmpSub = ‘&nbsp;‘) then
51           begin
52             Result := Result + ‘ ‘;
53             Continue;
54           end;
55 
56           // 在这里处理其他标记,否则直接贴上转义字符
57           Result := Result + tmpSub;
58         end;
59 
60       else
61         begin
62           // 其他字符不处理
63           Result := Result + tmpStr[iCharPos];
64         end;
65     end;
66     Inc(iCharPos);
67   end;
68 end;

实际上就是自己处理HTML标签,遇到 DISPLAY: none 和 font-size: 0px 的字符就给跳过。这样一来,剩下的就是真实可见部分了。另外要注意的是,HTML中有可能存在转义字符(最常见的是&nbsp;),处理方法见代码46行。

另外,还可以用IHTMLDocument3接口去处理HTML标记并获取内容,只不过那个方法处理起来比这个循环还麻烦,以后有机会再演示一下。

代码中只处理了 SPAN标签DISPLAY: none 和 FONT标签font-size: 0px 两种情况,如果要想程序通用,还需在代码中加入更多对不可见字符的识别。

时间: 2024-08-26 06:27:46

如何获取选定部分的HTML的相关文章

jeecg中datagrid中获取选定行的字段值

datagrid代码如下: <t:datagrid name="orderMainList" checkbox="true" pagination="true" fitColumns="false" title="信息" actionUrl="orderMainController.do?datagrid" idField="id" fit="true

MFC 获取Combo Box控件 当前选定项的序号和文本内容

代码如下: CString text; // 选定项的文本内容 Combobox m_combobox; // 控件变量 int cindex= m_combobox.GetCurSel(); // 获取选定项的序号 m_combobox.GetLBText(cindex,text); // 获取选定项的文本内容 其中,m_combobox为Combo Box控件变量,可由右键控件添加变量.序号cindex是从0开始的,也就是获取Combox Box控件的第一个项的序号为0. 原文地址:http

Win10开发:实现GridView选定项的反选

今天在开发Flickr下载器的时候遇到了要反选GridView选中项的反选问题,花了好一会儿才解决,所以写篇博文记录一下. 我觉得我的实现方法很Low,真的是很愚蠢的办法.不刚好我就是个愚蠢的人,只想到了这么个愚蠢的办法.如果读者有更优的办法欢迎指教. 废话有点多,进入正题. 先说说几个相关的GridView的属性或方法: 属性: SelectionMode:项的选择模式,有四个可选值.默认为单选,即Single.多选为:Multiple SelectedItem:获取或设置选定项,可读写 Se

jquery 获取用户选定值的方法

//启动删除程序 $("#deleteDetail").click(function () { //获取已选项的id集 if(confirm("确定要删除所选记录吗?")==true) { //获取所选记录id var idset=""; //用于记录复选框选定值的字符串变量 $("[name='did']:checked").each(function(){ // 根据name属性以及checked状态来获取被用户选定的项,

js获取gridview模板列中textbox行列的值

下面一个例子:在gridview中第一列输入数值,第二列输入数值,点击第三列的时候进行计算 求和,如果不符合标记为红色字体. 如图: 代码 : <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function

AngularJS 使用ngOption实现下拉列表

最近使用到了ngOption实现下拉选择列表,由于需要实现分组等功能,百度了下没有太好的文章,就百度到一篇英文的帖子,按照其中的代码很顺利的搞定了. 本篇根据文中代码,详细讲述下如何实现下拉列表 更多内容参考:AngularJS知识总结 下拉列表的简单使用 ng-option指令使用很简单,只需要绑定两个属性: 一个是ng-model用于获取选定的值: 另一个是ng-options用于确定下拉列表的元素数组. <select ng-model="engineer.currentActivi

DevExpress.GridControl.gridView的一些注意

1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了. 2.使单元格不可编辑. gridcontrol -->gridview -->OptionsBehavior -->Editable=false 3.没有下拉滚动条事件

DevExpress控件使用经验总结

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

C#控件方法及属性大全,望补充

C#控件及常用设计整理 1.窗体 常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: Normal (窗体正常显示). Minimized (窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示). (3)StartPosition属性:用来获取或设置运行时窗体的起始位置. (4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的