问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

HTML 处理利器 PostHTML 入门教程

发布网友 发布时间:2024-09-17 03:38

我来回答

1个回答

热心网友 时间:2024-09-30 21:00

PostHTML,听名字就让人联想到PostCSS,后者作为CSS处理器的后起之秀,一举扫除了SASS和LESS的威风,在社区中掀起了一股旋风。虽然PostHTML后来者居上,但能否成为新的热点,我们一起来揭开它的神秘面纱。

先来尝试一下PostHTML的基本功能。以下是一个HTML文档的例子:

段落中包含了一些emoji表情的文本表示,如:speak_no_evil:等。如何将其转换成网页上可以直接显示的表情呢?我们可以借助PostHTML的插件PostHTML-Retext来实现:

执行以上代码后,原始的HTML将被替换成如下样式:

如果看不到表情,可能是你的系统不支持。点击看图。原来是知乎不支持 ~~~~(>_<)~~~~

现在应该明白PostHTML的功能了——它是一个HTML处理器,输入HTML,经过一系列修改,输出新的HTML。

你可能想知道,这种替换功能我也能用正则表达式完成,那PostHTML的优势在哪里呢?

PostHTML之于HTML,就像PostCSS之于CSS,Uglify之于JavaScript,除了插件体系还不够成熟以外。

PostHTML相当于一个汽车翻新工厂,而PostHTML插件就像一个个流水线车间:

可见,PostHTML并不提供具体的功能,仅仅实现了HTML和PostHTMLTree之间的互相转化,并提供通用的API和插件模型,让插件操作PostHTMLTree。这与PostCSS如出一辙。具有以下优点:

如何使用PostHTML?安装PostHTMLAPI

posthtml([Array(plugin)]):调用posthtml装载插件,获取PostHTML实例;

posthtml().use(Array(plugin)):也可以通过PostHTML实例的use方法来装载插件;

posthtml().use(…).process(html[, options]):插件装载好之后,就可以使用process来处理HTML文档了。

实例

以下是来自官方的例子。

通过use方法装载了posthtml-custom-elements插件,就可以将自定义组件myComponent转换为。

gulp插件

posthtml也可以在gulp中使用。安装gulp插件gulp-posthtml:

使用:

如何编写PostHTML插件?

PostHTML的插件本质上就是一个函数,接受一个参数,即PostHTML工厂处理好的PostHTMLTree,插件要做的就是对这个tree进行修改。

PostHTML提供了两个方法来遍历tree:

下面是一个简单的插件:

这个插件会对影响HTML中的img标记产生影响,例如,有段HTML为:

使用了这个插件后:

很简单不是,是时候发挥你的聪明才智了,动手写一个插件来满足自己的需求吧!

提示:在使用match或者walk方法遍历tree时,如果callback没有返回值的话,当前的node就相当于被删除了。也就是说,如果你想移除某些节点,只需让callback不返回值或者返回undefined即可。暂时不能返回null,报错,为此我提交了一个PR。

如何与模板引擎结合使用?

PostHTML作为HTML处理器,自然可以与jade或者ejs之类的模板引擎结合使用。jade和ejs在处理业务逻辑、拼装业务数据方面有自己的优势,而PostHTML可以更多地用来处理这些模板引擎产生的HTML,比如压缩HTML代码等等。

下面这个例子来自PostHTML上的一个PR:

后记

PostHTML初出茅庐,在Github star也只有214,但相信不久的将来PostHTML也会像PostCSS一样横扫整个HTML处理器的世界。我也着手编写一个PostHTML插件posthtml-web-component,用来实现服务器端的动态化组件。欢迎关注。

热心网友 时间:2024-09-30 20:56

PostHTML,听名字就让人联想到PostCSS,后者作为CSS处理器的后起之秀,一举扫除了SASS和LESS的威风,在社区中掀起了一股旋风。虽然PostHTML后来者居上,但能否成为新的热点,我们一起来揭开它的神秘面纱。

先来尝试一下PostHTML的基本功能。以下是一个HTML文档的例子:

段落中包含了一些emoji表情的文本表示,如:speak_no_evil:等。如何将其转换成网页上可以直接显示的表情呢?我们可以借助PostHTML的插件PostHTML-Retext来实现:

执行以上代码后,原始的HTML将被替换成如下样式:

如果看不到表情,可能是你的系统不支持。点击看图。原来是知乎不支持 ~~~~(>_<)~~~~

现在应该明白PostHTML的功能了——它是一个HTML处理器,输入HTML,经过一系列修改,输出新的HTML。

你可能想知道,这种替换功能我也能用正则表达式完成,那PostHTML的优势在哪里呢?

PostHTML之于HTML,就像PostCSS之于CSS,Uglify之于JavaScript,除了插件体系还不够成熟以外。

PostHTML相当于一个汽车翻新工厂,而PostHTML插件就像一个个流水线车间:

可见,PostHTML并不提供具体的功能,仅仅实现了HTML和PostHTMLTree之间的互相转化,并提供通用的API和插件模型,让插件操作PostHTMLTree。这与PostCSS如出一辙。具有以下优点:

如何使用PostHTML?安装PostHTMLAPI

posthtml([Array(plugin)]):调用posthtml装载插件,获取PostHTML实例;

posthtml().use(Array(plugin)):也可以通过PostHTML实例的use方法来装载插件;

posthtml().use(…).process(html[, options]):插件装载好之后,就可以使用process来处理HTML文档了。

实例

以下是来自官方的例子。

通过use方法装载了posthtml-custom-elements插件,就可以将自定义组件myComponent转换为。

gulp插件

posthtml也可以在gulp中使用。安装gulp插件gulp-posthtml:

使用:

如何编写PostHTML插件?

PostHTML的插件本质上就是一个函数,接受一个参数,即PostHTML工厂处理好的PostHTMLTree,插件要做的就是对这个tree进行修改。

PostHTML提供了两个方法来遍历tree:

下面是一个简单的插件:

这个插件会对影响HTML中的img标记产生影响,例如,有段HTML为:

使用了这个插件后:

很简单不是,是时候发挥你的聪明才智了,动手写一个插件来满足自己的需求吧!

提示:在使用match或者walk方法遍历tree时,如果callback没有返回值的话,当前的node就相当于被删除了。也就是说,如果你想移除某些节点,只需让callback不返回值或者返回undefined即可。暂时不能返回null,报错,为此我提交了一个PR。

如何与模板引擎结合使用?

PostHTML作为HTML处理器,自然可以与jade或者ejs之类的模板引擎结合使用。jade和ejs在处理业务逻辑、拼装业务数据方面有自己的优势,而PostHTML可以更多地用来处理这些模板引擎产生的HTML,比如压缩HTML代码等等。

下面这个例子来自PostHTML上的一个PR:

后记

PostHTML初出茅庐,在Github star也只有214,但相信不久的将来PostHTML也会像PostCSS一样横扫整个HTML处理器的世界。我也着手编写一个PostHTML插件posthtml-web-component,用来实现服务器端的动态化组件。欢迎关注。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
导购什么字 店面导购员是什么意思 HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions... 无法安装adobeflashplayer,说无法注册ACTIVEX的控件 无法注册flash player的activex怎么办 omniverse create 他总说无法注册Flash player的Active控件 然后什么访问以下链接。不要... excel如何用进度条的形式表示完成率 买了件速干衣,北面的,求大神看一下真假。 秦皇岛银谷全城热恋是不是要预定票啊 html网页制作代码大全,学生个人网页制作入门教程! 那款五菱宏光像奔驰 下雪天开车,后驱车好还是前驱车好,为什么奔驰不如五菱宏光 noritz热水器不出热水了开关闪烁11 noritz燃气热水器11故障代码 noritz热水器11℃ noritz热水器温度跳11怎么办 Noritz热水器11故障 noritz热水器闪烁优先11 Noritz热水器温度跳11的解决方法 Noritz热水器11报错解决方法 Noritz热水器闪烁11原因 Noritz热水器闪烁11故障代码 清兵卫清兵卫与葫芦 广东省深圳市宝安区龙华街道办东吴工业区厂房四栋四楼蓝魔兽后处事部... 深圳龙华厂房走势如何? 72房客,张学友模仿张学友的那首是什么歌 "如果恋人都不再需要"是那首歌的歌词 张学友的一首歌其中的一句歌词是“有着你便有着我,真爱是永不死... 华为手机自带手机管家可以卸载吗? DIV+CSS入门教程哪里有?给个好点的网址。。 jquery页面加载完成后执行? 反对关系和矛盾关系有何区别? 网页预览pdf文件怎么下载? 反对关系矛盾关系 如何下载网页中的 pdf 文件?一起打败「只给看不给下」魔咒! 腌咸鸭蛋用盐比例 ...JQuery的Invalid Regular Expression Options错误 K1077次列车经过哪些地方,宁波到酉阳攻略旅游路线 &lt;JS篇&gt; 异步函数执行顺序问题 想一个人出去走走,去哪 你开房车出去旅游一次需要多长时间?一年的花销是多少钱 中老年人适合吃什么钙 现在柘城房价多少啊? 现在柘城房价是多少 河南柘城房价会涨吗 现在河南柘城房价是多少?请给个详细的 河南省柘城县房价 现在柘城房价多少 jscript和javascript的区别是什么? 为什么关机后键盘上的键还亮着?