如何获取选定部分的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 // - 空格
50 if (tmpSub = ' ') 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中有可能存在转义字符(最常见的是 ),处理方法见代码46行。
另外,还可以用IHTMLDocument3接口去处理HTML标记并获取内容,只不过那个方法处理起来比这个循环还麻烦,以后有机会再演示一下。
代码中只处理了 SPAN标签DISPLAY: none 和 FONT标签font-size: 0px 两种情况,如果要想程序通用,还需在代码中加入更多对不可见字符的识别。
如何获取选定部分的HTML的更多相关文章
- jeecg中datagrid中获取选定行的字段值
datagrid代码如下: <t:datagrid name="orderMainList" checkbox="true" pagination=&qu ...
- 使用 JavaScript 在下拉列表中获取选定的值
使用 JavaScript 在下拉列表中获取选定的值 演示Demo 使用 JavaScript 在下拉列表中获取选定的值? <!DOCTYPE html> <html> < ...
- easyui时间控件用js实时获取选定的时间的取法
easyui时间控件用js实时获取选定的时间的取法var datetime=$("#id").datetimebox("getValue");不能用 $(& ...
- bootstrp的datetimepicker插件获取选定日期
碰到一个日期选择,并将日期存储到数据库的需求,需要利用bootstrp的datetimepicker插件获取选定日期,并将其转换为指定字符窜,简单记录下实现的过程. 1. datetimepicker ...
- ArcGIS Add-in开发(一)--获取选定要素的属性值
刚刚接触AE开发,记录一下自己的学习心得! 欢迎大家一起交流探讨! 最近做大赛,突然想到可以让项目更加直观的操作,就在项目中加了幅底图(底图很简单) 我想在arcmap中选中相应的要素后,在后台通过写 ...
- dialogs打开对话框选定文件夹,getopenfilename获取文件名
如果需要使用“打开”.“打印”等Excel内置对话框已经具有的功能,可以使用代码直接调用这些内置的对话框,如下面的代码所示. #001 Sub DialogOpen() #002 Appl ...
- js获取gridview模板列中textbox行列的值
下面一个例子:在gridview中第一列输入数值,第二列输入数值,点击第三列的时候进行计算 求和,如果不符合标记为红色字体. 如图: 代码 : <html xmlns="http:// ...
- Winfrom 中 ComboBox 绑定数据后设置选定项问题
在为 ComboBox 当定数据的时候,如果遇到界面显示需要用文本,而获取选定项的值时需要用数字,我们就很习惯使用 DataSource 来进行绑定. 例如以下代码: List<TextVal ...
- listBox获取项的方法
获取所有项 ; i < LB.Items.Count;i++ )2 {3 str_arr.Add(LB.Items[i].ToString()); 4 } 获取指定项 string str=LB ...
随机推荐
- Python3基础 str *运算 重复拼接字符串
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- windows10下使用source insight出现"source insight program editor已停止工作"的问题
一.背景 1.1 OS 版本 windows 10 1.2 source insight版本 source insight 3.50.0034 二.解决方案 删除"我的文档"下面的source ins ...
- trigger自动执行事件
html <button>点击文字变红</button> <p>trigger出发点击事件</p> js $('button').click(funct ...
- [SpringMVC] - 简单说明什么是SpringMVC
M 代表 模型(Model)V 代表 视图(View) C 代表 控制器(controller) 模型是什么呢? 模型就是数据,就是dao,bean 视图是什么呢? 就是网页, JSP,用来展示模型中 ...
- hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b
hdoj上一道有意思的题目,题目: 人见人爱a+b 敲的也蛮快的,大概十分钟左右就AC了.代码如下: 人见人爱a+b #include<stdio.h> int main() { int ...
- BZOJ 2467: [中山市选2010]生成树(矩阵树定理+取模高斯消元)
http://www.lydsy.com/JudgeOnline/problem.php?id=2467 题意: 思路:要用矩阵树定理不难,但是这里的话需要取模,所以是需要计算逆元的,但是用辗转相减会 ...
- 初探 Yii2 的测试模式 index-test.php
有没有发现高级版每个应用的 web 目录下有两个入口文件,一个index.php 一个 index-test.php通过init.bat可以切换到调试模式和产品模式,这两个模式相信同学们都很熟悉了,那 ...
- mybatis generator插件系列--lombok插件 (减少百分之九十bean代码)
经常使用mybatis generator生成代码的你 有没有因为生成的getter/setter而烦恼呢? 有没有生成后又手动加toString/hashCode/Equals方法呢? 有没有改一个 ...
- Qt与FFmpeg联合开发指南(一)——解码(1):功能实现
前言:对于从未接触过音视频编解码的同学来说,使用FFmpeg的学习曲线恐怕略显陡峭.本人由于工作需要,正好需要在项目中使用.因此特地将开发过程总结下来.只当提供给有兴趣的同学参考和学习. 由于FFmp ...
- MyEclipse快捷键大全【转】
-------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...