目前在做博客相关的功能,在显示文章详情的时候,我看到那些大的博客社区,文章中的图片都是可以点击放大的,我感觉这个功能非常好,我也想做,在PHP版本的博客中已经实现了。
实现原理其实很简单,使用PHP的simple_html_dom库解析HTML字符串,找到其中的img标签,在img标签上添加onclick点击方法。在前端的html中编写好对应的点击方法,即可实现点击图片放大的效果。
那么在java中我该如何实现呢?
实现思路参照PHP版本的实现思路就可以。现在我需要的是找到一个java的解析html字符串的库。他就是Jsoup
一:引入jar包
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
**
**
二:Jsoup基本使用介绍
Jsoup解析html一般都是web爬虫使用。Jsoup需要将爬下来的数据解析出来,成为我们要的数据。
1:加载数据的三种方式:
(1):从url中加载html
Document document = Jsoup.connect("https://guanchao.site/pc/placeOnFile").get();
System.out.println(document.title());
(2):从文件中加载html
Document document = Jsoup.parse( new File( "c:/temp/demo.html" ) , "utf-8" );
System.out.println(document.title());
(3):从字符串中加载html
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document document = Jsoup.parse(html);
System.out.println(document.title());
2:使用DOM定位元素
查找元素-下列方法返回的是Element或Elements
getElementById(String id):通过id来查找元素
getElementsByTag(String tag):通过标签来查找元素
getElementsByClass(String className):通过类选择器来查找元素
getElementsByAttribute(String key) :通过属性名称来查找元素,例如查找带有href元素的标签。
siblingElements():获取兄弟元素。如果元素没有兄弟元素,则返回一个空列表。
firstElementSibling():获取第一个兄弟元素。
lastElementSibling():获取最后一个兄弟元素。
nextElementSibling():获取下一个兄弟元素。
previousElementSibling():获取上一个兄弟元素。
parent():获取此节点的父节点。
children():获取此节点的所有子节点。
child(int index):获取此节点的指定子节点。
3:css选择器方式
tagname: 通过标签查找元素,例如通过"a"来查找< a >标签。
#id: 通过ID查找元素,比如通过#logo查找< p id=“logo”>
.class: 通过class名称查找元素,比如通过.titile查找< p class=“titile”>
ns|tag: 通过标签在命名空间查找元素,比如使用 fb|name 来查找 < fb:name>
[attribute]: 利用属性查找元素,比如通过[href]查找< a href=“…”>
[ ^attribute]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 dataset属性的元素
[ attribute=value]: 利用属性值来查找元素,比如:[ width=500]
[attribute^=value], [attribute$=value], [attribute*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如通过[href*=/path/]来查找
[attribute~=regex]: 利用属性值匹配正则表达式来查找元素,比如通过 img[src~=(?i).(png|jpe?g)]来匹配所有的png或者jpg、jpeg格式的图片
*: 通配符,匹配所有元素
4:组合使用
例如:Elements elements = doc.select(“div.css_tr_event”);
el#id: 元素+ID,比如: div#logo
el.class: 元素+class,比如: div.masthead
el[attr]: 元素+class,比如 a[href]匹配所有带有 href 属性的 a 元素。
任意组合,比如:a[href].highlight匹配所有带有 href 属性且class="highlight"的 a 元素。
ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素,中间有一个空
parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div
siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p
el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo
当然,我这里用不上这么复杂,dom标签选择器就够,遇到了就先了解一下。以后用到了再仔细看。
5:获取数据
attr(String key):获取单个属性值
attributes():获取所有属性值
attr(String key, String value):设置属性值
text():获取文本内容
text(String value):设置文本内容
html():获取元素内的HTML内容
html(String value):设置元素内的HTML内容
outerHtml():获取元素外HTML内容
data():获取数据内容(例如:script和style标签)
id():获得id值(例:
衣服
)
className():获得第一个类选择器值
classNames():获得所有的类选择器值
tag():获取元素标签
tagName():获取元素标签名
6:操作HTML文本
append(String html):在末尾追加HTML文本
prepend(String html):在开头追加HTML文本
html(String value):在匹配元素内部添加HTML文本。
最后,放一下官方文档:
有好的建议,下方输入你的评论。