JSP标记学习笔记 (转)[@more@]
JSP标记学习笔记XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
ginkou.fly 2002-9-18
1. 概述
1) 什么是JSP标记
顾名思义,JSP标记就是在JSP文件中使用的标记。它类似于html语法中的标记,像head 、table 。通过在JSP文件中引用它(就像使用html标记那样),可以更方便的实现对Java 代码模块的重用。
2) 为什么要使用JSP 标记技术(与javabean相比)
好处:
J JSP 标记可以处理JSP正文的内容,比如改变文本显示样式;而javabean不可以。
J JSP标记接口简单,易于使用,也易于开发和维护。
坏处:
L JSP标记在进行设置时要比javabean复杂很多,体现在JSP标记库描述文件(*.tld)的配置上。
L JSP标记实现的功能远不如javabean强大。
L 当前只要JSP1.1支持JSP标记,而JSP1.0和1.1都支持对Bean的使用。
2. JSP标记的开发简介。
JSP标记的开发需要编写2种独立的文件。一种是定义标记功能的java类文件,一种是将xml元素名称(标记)映射到标记实现的标记库描述符文件。
⑴ 编写标记处理程序类文件
需要继承javax.servlet.jsp.tagext.TagSupport类;
简单示例:
//文件名ExampleTag.java
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class ExampleTag extends TagSupport {
//程序的执行起始点
public int doStartTag() {
try {
JspWriter out=pageContext.getOut();
out.print(“Custom tag example”);
}catch (IOException ioe) {
System.out.println(“Error in ExampleTag : “ + ioe);
}
return(SKIP_BODY);
//当标记包括的内容为空时返回SKIP_BODY,表示标记功能
//已执行完成
}
}
编译好的class文件将位于服务器的的特定位置。
⑵ 编写标记库描述符文件
将标记名和其代表的功能实现联系在一起。
简单示例:
<!--文件名:csajsp-taglib.tld-->
PUBLIC “-//Sun Microsystem,Inc.//DTD JSP Tag Library 1.1//EN”
J2EE/dtds/web-jsptaglibrary_1_1.dtd">http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd>
//以上是标准的文件头
//以下是标签库描述
1.0 //Tag 库的版本
1.1 //Jsp 库的版本
csajsp//自定义标记前缀名
//标记描述符文件的uri,可以是空
My custom tag! //标记库的描述信息
//以下定义新标记
example //自定义的标记名
tags.ExampleTag//定位标签处理类文件
Simplest example//描述信息
EMPTY // 不处理Jsp文件正文内容
此文件将配置在服务器的特定位置
⑶ 使用以上自定义的标记
<!--文件名:simpleExample.jsp-->
<%@ taglib uri = “csajsp-taglib.tld” prefix = “csajsp” %> //进行标记使用声明
<csajsp:example /><TITLE></P>
<P><LINK REL=STYLESHEET HREF=”JSP-styles.css”</P>
<P> TYPE=”text/css”></P>
<P><HEAD></P>
<P><BODY></P>
<P><H1><B><csajsp:example /></B><H1> /使用标记</P>
<P><B><csajsp:example /></B></P>
<P></BODY></P>
<P></HTML></P>
<P>这样最终在在浏览器上输出为</P>
<P> Custom tag example</P>
<P>3. 深入的JSP标记开发</P>
<P>⑴ 添加标记属性</P>
<P>在标记处理类中可以通过函数setAttribute(String value) 为jsp标记分配属性,这样标记处理程序根据获取的属性值来实现相关功能。</P>
<P>比如 private String message = “Default Message”;</P>
<P>public void setMessage(String message) {</P>
<P> this.message=message;</P>
<P> }</P>
<P><B>注意</B>:属性名message是小写的,设置函数中的Message是大写的。</P>
<P>◆与之相关的在tld文件中需要在tag元素中添加如下元素</P>
<P><tag></P>
<P></P>
<P><name>message</name> //属性名</P>
<P><required>false</requied> //属性值是否必须提供。False表示不必,存在缺省值。</P>
<P><rtexprvalue>true</rtexprvalue></P>
<P>//ture表示属性值可以使用jsp表达式,false表示禁</P>
<P>//止使用</P>
<P></attribute></P>
<P></tag></P>
<P>◆对应jsp文件中引用为:<prefix : name message = “ Hello!” /></P>
<P>⑵ 使用标记正文</P>
<P> 即是在标记中使用一些包含jsp脚本元素、文本等的内容,这些内容由jsp引擎处理。</P>
<P> 形式如下:</P>
<P> <prefix : tagname> body(正文内容) <prefix : tagname></P>
<P> 在处理jsp标记的正文前,将会调用处理程序的doStartTag()方法,此时要在此方法中返回EVAL_BODY_INCLUDE 以表明包含有标记正文;处理完后,将会调用doEndTag()方法,此后要让jsp引擎继续处理后面的页面,得返回EVAL_PAGE,否则返回SKIP_PAGE。</P>
<P> ◆对应在tld文件中需要在tag元素中添加如下元素</P>
<P> <tag></P>
<P> …</P>
<P> <bodycontent>JSP</bodycontent> //表明包含正文</P>
<P> …</P>
<P> </tag></P>
<P> 另外:可以设置一些条件来判断是否包含正文的,如下:</P>
<P> public int doStartTag() {</P>
<P> ServletRequest request = pageContext.getRequest();</P>
<P> String debugFlag = request .getParameter(“debug”);</P>
<P> If ((debugFlag!=null) && (!debugFlag.equalsIgnoreCase(“false”))) {</P>
<P> Return (EVAL_BODY_INCLUDE);</P>
<P> }</P>
<P> else {</P>
<P> return(SKIP_BODY);</P>
<P> }</P>
<P> }</P>
<P>这样只有在url尾部给出请求参数值debug = true,才会显示标记正文的内容。这样可以隐藏一些调试信息。</P>
<P>⑶ 对标记正文进行处理</P>
<P> jsp的标记可以对包含的正文进行处理(修改),然后再输出。这需要标记处理类继承BodyTagSupport类(TagSupport类的继承)。这个类提供了2个重要的方法用于正文处理。</P>
<P> → doAfterBody:默认执行的方法,在此方法中包含正文的处理过程。</P>
<P>→ getBodyContent:返回BodyContent类型的的对象,此对象包含了有关标记正文的信息。</P>
<P> BodyContent类型包含的重要方法:</P>
<P>→ getEnclosingWriter:返回JspWriter方法,输出内容。</P>
<P>→ getString:返回包含全部jsp标记正文的字符串。</P>
<P><B>注意</B>:这里和⑵中介绍的输出jsp标记正文的方式不一样。前者的输出是先由jsp引擎解释,这里是在jsp标记处理程序中直接输出到给浏览器。</P>
<P>另外,在doAferBody中返回SKIP_BODY,表示终止标记正文处理;若返回的是EVAL_BODY_TAG,将会再一次调用doAferBody方法,重新处理标记正文,直到返回SKIP_BODY为止。</P>
<P>示例:</P>
<P>→标记处理程序片:</P>
<P>//下面的程序片将调用一个filter方法,此方法用于把jsp正文中的字符< > “ & 分别用 > &guot; &来代替。以使浏览器按字符原样输出,不进行解释。</P>
<P>public class FillterTag extends BodyTagSupport {</P>
<P> public int doAfterBody() {</P>
<P> BodyContent body=getBodyContent();</P>
<P> String filteredbody=ServletUtilities.filter(body.getString()); //将正文得到的字符串过滤</P>
<P> Try {</P>
<P> JspWriter out=body.getEnclosingWriter();</P>
<P>out.print(filteredBody); //输出过滤后的文本</P>
<P>}catch(IOException ioe) {</P>
<P> System.out.println(“Error in FilterTag: “ + ioe);</P>
<P>}</P>
<P>return(SKIP_BODY); //终止jsp正文处理</P>
<P> }</P>
<P>→标记符描述文件片</P>
<P> …</P>
<P> <tag></P>
<P> <name>filter</name></P>
<P> <tagclass>tags.FilterTag</tagclass></P>
<P> <bodycontent>JSP</bodycontent></P>
<P> </tag></P>
<P> …</P>
<P>→jsp文件片</P>
<P> <csajsp:filter></P>
<P> <STRONG>I love you!</STRONG><BR></P>
<P> <EM>I love you!<EM></P>
<P> </csajsp:filter></P>
<P> 这样,在浏览器中输出的标记正文应当是</P>
<P><STRONG>I love you!</STRONG><BR></P>
<P><EM>I love you!<EM></P>
<P> 而不是</P>
<P><B> I love you!</B></P>
<P><I> I love you!</I></P>
<P><I> </I> ⑶使用jsp嵌套标记。</P>
<P> 可以对多个JSP标记进行嵌套引用,这样子标记就可以访问和存储父标记的数据和方法。</P>
<P> 子标记访问父标记需要使用BodyTagSupport类中的 findAccetorWithClass方法。注意它只能查找临近的父标记。</P>
<P> 假如在jsp文件中如下的嵌套引用:</P>
<P> <!- - 此嵌套标记模拟条件判断- -></P>
<P> <csajsp:if></P>
<P> <csajsp:condition>true</csajsp:condition></P>
<P> <csajsp:then>Condition was true</csajsp:then></P>
<P> <csajsp:else>Condition was false</csajsp:else></P>
<P> </csajsp:if></P>
<P> 相应的标记处理程序片:</P>
<P> →对于if标记,执行类如下:</P>
<P> public class IfTag extends TagSupport {</P>
<P> private boolean condition ;</P>
<P> private Boolean haSCOndition = flase ;</P>
<P> public void setCondition(Boolean condition) { //设置判断条件的真假;condition子标</P>
<P>//记调用</P>
<P> this.condition = condition ;</P>
<P> hasCondition = true ;</P>
<P> }</P>
<P>public Boolean getCondition() { //获取判断条件的真假then 、else子标</P>
<P>//记调用</P>
<P> return(condition) ;</P>
<P> }</P>
<P> public void setHasCondition(Boolean flag) { //判断if标记后是否存在条件,由</P>
<P>//condition子标记调用</P>
<P> this.hasCondition = flag ;</P>
<P> }</P>
<P> public Boolean getHasCondition() { //获取是否存在判断条件的信息,由</P>
<P>//then、else标记调用</P>
<P> return(hasCondition) ;</P>
<P> }</P>
<P> public int doStartTag() {</P>
<P> return(EVAL_BODY_INCLUDE) //包含子标记</P>
<P> }</P>
<P> }</P>
<P>→那么对于condition等其它子标记的处理程序,需要获取父标记处理程序对象:</P>
<P>IfTag parent=(IfTag) findAncestorWithClass(this,IfTag.class)</P>
<P>之后就可以操作父标记处理程序的相应方法。</P>
<P>示例:(对于condition标记)</P>
<P>public class IfConditionTag extends BodyTagSupport {</P>
<P> <B>ifTag parent = (IfTag)findAncestorWithClass(this,IfTag.class); /</B>/获取父标记对应的对象</P>
<P>If (parent = = null) {</P>
<P> Throw new JspTagException(“condition not inside it”);</P>
<P>}</P>
<P>return(EVAL_BODY_TAG);</P>
<P>}</P>
<P>public int doAfterBody() {</P>
<P> <B>ifTag parent = (IfTag) findAncestorWithClass(this , IfTag.class) ;</B></P>
<P> String bodyString = getBodyContent() . getString() ;</P>
<P> If (bodyString.trim().equals(“true”)) {</P>
<P> <B>Parent.setCondition(true) /</B>/访问父标记处理类中的方法</P>
<P> }else {</P>
<P> <B>parent.setCondition(false)</B> ;</P>
<P> }</P>
<P>return(SKIP_BODY) ;</P>
<P>}</P>
<P>}</P>
<P>其余标记类和此相似。</P>
<P>4. 小结</P>
<P>对于一些不太复杂和功能单一的逻辑描述,需要传递的参数要求不高时,使用JSP标记,要方便的多。对于大多数的商业逻辑应用,还是使用bean要好的多,也宜于servlet控制。</P>
<P>这个东东是俺学习 人邮 出的Servletlet与JSP核心技术》时随手写下的。里面的程序还没具体配置过。过段时间弄了再搞篇实验体会吧。</P>
<P>有什么值的商讨的发eMail哦。ginkou@163.com</P><BR></SPAN></div>
<div class="tj-read-box">
<div class="tj-read-content">
<div class="tit">推荐阅读:</div>
<ol>
<li>
<a href="/zixun/36142.html">git 学习笔记</a>
</li>
<li>
<a href="/zixun/59539.html">Overlay学习笔记</a>
</li>
</ol>
</div>
</div>
<div class="zixun-tj-product adv-bottom"></div>
<div class="datails-explain">
<p>免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。</p>
<div class="datails-explain-tag clearfix">
<a href="/zixun/tags/840/">jsp</a>
<a href="/zixun/tags/546/">学习</a>
<a href="/zixun/tags/3480/">标记</a>
</div>
</div>
<div class="prve-next-information">
<p>上一篇:<a href="/zixun/224030.html">Python3爬虫利器中Scrapy-Redis的安装方法是什么</a></p>
<p>下一篇:<a href="/zixun/224050.html">清除python界面的方法</a></p>
</div>
<div class="relevant-read">
<h2 class="relevant-read-title">相关阅读</h2>
<div class="relevant-read-list">
<ul>
<li><a href="/zixun/61974.html">学习笔记-IP</a></li>
<li><a href="/zixun/71203.html">[Android学习笔记二] View转化Bitmap</a></li>
<li><a href="/zixun/93720.html">golang 学习笔记之字符串</a></li>
<li><a href="/zixun/277448.html">JSP (转)</a></li>
<li><a href="/zixun/277698.html">菜鸟学jsp(一) (转)</a></li>
<li><a href="/zixun/277714.html">JSP中自定义标记符的使用 (转)</a></li>
<li><a href="/zixun/277932.html">JSP开发入门(三)----JSP与JavaBean (转)</a></li>
<li><a href="/zixun/278312.html">使用lomboz调试JSP (转)</a></li>
<li><a href="/zixun/278494.html">求救!!!!!!jsp执行错误;(转)</a></li>
<li><a href="/zixun/278614.html">JSP 语法详解(转)</a></li>
</ul>
</div>
</div>
<!--<div class="share-box">
<!-- 加active类名为已点赞状态
<a href="javascript:;" class="like"><i class="like-icon"></i><span class="like-text">点赞</span><span class="like-math">0</span></a>
<div class="share-select">分享:<i class="share-select-icon"></i></div>
</div>
<div class="share-modal">
<div class="share-modal-box">
<div class="share-tit">分享到:</div>
<ul>
<li><a href="javascript:;"><i></i><span>朋友圈</span></a></li>
<li><a href="javascript:;"><i></i><span>微信好友</span></a></li>
<li><a href="javascript:;"><i></i><span>QQ好友</span></a></li>
<li><a href="javascript:;"><i></i><span>新浪微博</span></a></li>
<li><a href="javascript:;" class="copy-share-item"><i></i><span>复制链接</span></a></li>
</ul>
<div class="share-modal-bottom"><button type="button" class="close-share-modal">取 消</button></div>
</div>
</div>
<div class="back-page-top"></div>-->
<!--<div class="base_detail" style="display: none">--><!--</div>-->
<!-- 登录注册 -->
<div class="log_reg_modal">
<div class="content">
<div class="tips" id="first_tips">
<div class="body">
<span class="close-modal-btn"></span>
<div class="tips_body"><span></span>
<p id="tips_content">您好,登录后才能下订单哦!</p>
</div>
</div>
<div class="bottom">
<button type="button" class="register_btn">立即注册</button>
<button type="button" class="login_btn">立即登录</button>
</div>
</div>
<div class="log_box">
<div class="head" style="text-align: center;padding-left: 0;line-height: 1.333333rem;font-size: 0.48rem;color: #2D3037;">密码登录<span class="close-modal-btn"></span>
</div>
<div id="login-error" class="login-error" style="padding-top: 0; padding-bottom: 0;"></div>
<div class="log_pwd">
<ul>
<li>
<input type="text" placeholder="请输入亿速云账号/手机号" id="login-username" maxlength="20">
<span class="phone_icon"></span>
</li>
<li>
<input type="password" style="display:none;width:0px;height:0px;">
<input type="text" placeholder="登录密码" id="login-password" name="login-password" maxlength="20" onfocus="this.type='password',this.autocomplete='new-password'" autocomplete="off">
<input type="text" style="z-index: -20;display: none;">
<span class="pwd_icon"></span>
<div class="log-modal-forget-pwd"><a href="#">忘记密码?</a></div>
</li>
</ul>
<div class="verify_box verifycodeFirstnofast" style="display: none;">
<input type="text" placeholder="请输入验证码" id="verifycode" maxlength="6">
<div class="img_verify">
<img class="verification-img" id="code_img_kj" src="https://yisuapi.yisu.com/Home/Index/verifyNoAgo" alt="验证码" title="点击更换">
</div>
<span class="verify_icon"></span>
</div>
</div>
<div class="log_button">
<button type="button" id="submit-login" style="display:block;">登 录</button>
<button type="button" id="submit-login-fast" style="display:none;">登 录</button>
<button type="button" class="reg_new">注 册</button>
</div>
</div>
<div class="reg_box">
<div class="head" style="padding-left:0px;">登录注册<span class="close-modal-btn"></span></div>
<div id="login-error-reg" class="login-error" style="padding-top: 0; padding-bottom: 0;"></div>
<div class="reg_prompt">
<div class="reg_prompt_box">
<input type="text" id="tokens" value="" hidden="">
<input type="text" placeholder="请输入您的手机号码" id="reg-phone" maxlength="11">
<span class="phone_icon"></span>
</div>
<div class="verify_box">
<input type="text" autocomplete="off" placeholder="请输入短信验证码" maxlength="6" id="reg-step-b-code">
<!-- 加 sent 类名是已发送验证码样式 -->
<a href="javascript:;" class="sendBtn_reg_fast">获取短信验证码</a>
<span class="verify_icon"></span>
</div>
<div class="verify_box" style="margin-bottom: 20px;display: none;">
<input type="text" placeholder="请输入验证码" id="verifycode_fast_reg" maxlength="6">
<div class="img_verify">
<img class="verification-img" id="code_img_kj_reg" src="https://yisuapi.yisu.com/Home/Index/verifyNoAgo" alt="验证码" title="点击更换">
</div>
<span class="verify_icon"></span>
</div>
</div>
<div class="reg_button">
<button type="button" id="submit-reg-b">登录 / 注册</button>
<button type="button" class="login_go">密码登录</button>
</div>
</div>
<div class="other-box">
<div class="otherway">
<span>其他方式登录</span>
<div class="other-login">
<a href="javascript:toQQLogin();" title="QQ登录" class="login-qq"><i class="btn_sns_icon qq_icon"></i></a>
<a href="javascript:;" title="微信登录" class="login-wechat"></a>
<a href="javascript:toAlipayLogin();" title="支付宝登录" class="login-alipay"><i class="btn_sns_icon alipay_icon"></i></a>
</div>
</div>
<div class="agree-xieyi">点击 登录注册 即表示同意<a href="/help/id_7.html" target="_blank">《亿速云用户服务条款》</a></div>
</div>
</div>
</div><script>
//弹出注册框
function alertRegBox() {
$('.log_reg_modal').show().children('.content').addClass('animation_content');
//初始化
$('.reg_box').show();
$('#other_tips,.log_box,#first_tips,.wechat_login,.reg_success').hide();
}
$('.gpt-page-link').click(function () {
//判断是否登录
if(getCookie('ysusername') == undefined){
alertRegBox();
return;
}
window.location.href = 'https://m.yisu.com/zixun/technicalSupport';
})
</script>
<div class="product-link">
<div class="linkbox">
<div class="linkbox-title"><a href="javascript:;">产品服务<span class="arrow"></span></a></div>
<div class="linkshow">
<ul>
<li><a href="/cloud/">云服务器</a></li>
<li><a href="/ddos/">高防服务器</a></li>
<li><a href="/ip/">高防IP</a></li>
<li><a href="/physicsserver/">裸金属服务器</a></li>
<li><a href="/mainframe/">专属宿主机</a></li>
<li><a href="/trusteeship/">机柜租用</a></li>
<li><a href="/ssl/">SSL证书</a></li>
<li><a href="/elasticip/">弹性IP</a></li>
<li><a href="/clouddisk/">云硬盘</a></li>
</ul>
</div>
</div>
<div class="linkbox">
<div class="linkbox-title"><a href="javascript:;">地区划分<span class="arrow"></span></a></div>
<div class="linkshow">
<ul>
<li><a href="/hk/">香港服务器</a></li>
<li><a href="/usa/">美国服务器</a></li>
<li><a href="/germany/">德国服务器</a></li>
<li><a href="/japan/">日本服务器</a></li>
</ul>
</div>
</div>
<div class="linkbox">
<div class="linkbox-title"><a href="javascript:;">帮助支持<span class="arrow"></span></a></div>
<div class="linkshow">
<ul>
<li><a href="/help/">帮助中心</a></li>
<li><a href="/help/index_38_41.html">网站备案</a></li>
<li><a href="/cve/">安全漏洞</a></li>
</ul>
</div>
</div>
<div class="linkbox">
<div class="linkbox-title"><a href="javascript:;">关于我们<span class="arrow"></span></a></div>
<div class="linkshow">
<ul>
<li><a href="/about/" rel="nofollow">关于亿速云</a></li>
<li><a href="/case/" rel="nofollow">客户案例</a></li>
<li><a href="/news/">新闻资讯</a></li>
<li><a href="/employ/" rel="nofollow">加入亿速云</a></li>
<li><a href="/about/contact.html" rel="nofollow">联系亿速云</a></li>
</ul>
</div>
</div>
<a href="/zixun/time/" class="zixun-article-link">行业资讯-文章归档</a>
<a href="/ask/time/" class="zixun-article-link">问答-问答归档</a>
</div>
<div class="footer">
<div class="footer-logo"></div>
<div class="yisu-name">广州亿速云计算有限公司</div>
<p>7*24小时在线电话:400-100-2938</p>
<p>7*24小时在线QQ:800811969</p>
<div class="beian-text">
<p>Copyright © Yisu Cloud Ltd. All Rights Reserved. 2018 版权所有<br>粤ICP备17096448号-1 粤公网安备 44010402001142号</p>
</div>
</div>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/common/md5.min.js?v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/information/detail.js?v=20220516&v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/information/zixun.js?v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/information/zixun-menu.js?v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/common/log-reg-modal.js?v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/mobile/www/js/common/log-reg-submit.js?v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/www/js/information/markdown-it.min.js?v=1741750699&v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/www/js/information/highlight.min.js?v=1741750699&v=202412021444"></script>
<script type="text/javascript" src="https://cache.yisu.com/www/js/information/languages_go.min.js?v=1741750699&v=202412021444"></script>
<script src="https://cache.yisu.com/mobile/www/js/common/common.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?0910b1e24e81c0e61462b7a766830fec";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
(function(b,a,e,h,f,c,g,s){b[h]=b[h]||function(){(b[h].c=b[h].c||[]).push(arguments)};
b[h].s=!!c;g=a.getElementsByTagName(e)[0];s=a.createElement(e);
s.src="//s.union.360.cn/"+f+".js";s.defer=!0;s.async=!0;g.parentNode.insertBefore(s,g)
})(window,document,"script","_qha",340413,false);
</script>
</body>
</html><script>
// // 创建 markdown-it 实例
// var md = markdownit({
// html: true,
// css: true,
// less: true,
// sass: true,
// langPrefix:'language-',
// typographer: true,
// highlight: function (str, lang) { // 代码高亮显示
// if (lang && hljs.getLanguage(lang)) {
// try {
// return '<pre class="hljs"><code>' +
// hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
// '</code></pre>';
// } catch (__) {}
// }
// return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
// }
// });
//
// function convertToHTML(value) {
// return md.render(value); // 转换 Markdown 到 HTML
// }
// hljs.highlightAll();
// $(function () {
// $('.details-information-text').html(convertToHTML($('.base_detail').html()))
// })
</script>