jquery中after与insertAfter有什么区别

jquery中after与insertAfter有什么区别,第1张

jquery的dom *** 作方法中,包括了after与insertAfter,这两个方法名字相近,所实现的功能从名 字中不容易分辨,所以在经过试验后撰文一篇以加深记忆。

测试代码如下:

<html>

<head>

<meta charset=”utf-8″>

<title>测试insertAfter与after的区别 </title>

</head>

<body>

<ul>

<li class=”first”>first</li>

<li class=”middle”>middle</li>

<li class=”last”>last</li>

</ul>

</body>

</html>

自然状态下显示是这样的:

添加脚本:$(‘.first’).insertAfter($(‘.last’))

则会把first移到last后面去,变成了这样:

如果把insertAfter方法换为after,效果则为:

从上述对比可以看出,其实这两个方法的差别就像主语跟宾语的差别一样,是主与从的问题。

after方法,是把参数元素移到调用方法的元素的后面,而insertAfter方法则恰恰相反,是把调用 方法的元素插入到参数元素的后面。

另外要注意的是,当要用这两个方法在dom树中添加新元素时,如

”<li>new</li>”,这样的html字符串不能出现在after方法的调用主体或

insertAfter的参数中,因为这样一来,jquery不知道要把新元素放到哪里去,反而会导致要相关的原 有元素丢失。

在Word指定位置插入富文本域值(html文本)

遇到此问题,首先想到的就是各种百度。结果度娘了一会并没有发现有用的有效的解决方法,哎,看来还得靠自己啊。

首先整理了下手头上的资源,一是HtmlAgilityPack,专门解析Html文本用的;二是我有ASPOSE.Word。

再整理下思路:在Word中插入Html,首先有一点是肯定的,Word跟Html都是Document结构,这点应该是没啥怀疑的。如此的话就感觉好办多了,无非就是Document上插入几个节点,在Html插入节点的方式完全可以运用到此地方。

那么第一种解决方法就是:首先把Word转换为Html,然后在指定位置插入当前要插入的Html代码,然后再保存成Word格式的文档。

第二种方式就是:把Html解析出有效的文本,利用Word增加段落的方式添加从Html中解析出来的文本。

HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument()

hd.LoadHtml(txtContent.Value)

hd.DocumentNode.Elements("p");

通过此方式就可以获取到富文本域里面的所有文本信息。但是此种方式获取到的节点在ASPOSE类里面不识别。

再继续折腾吧,回到ASPOSE上面。找帮助文档,寻百度。

Document doc = new Document(Server.MapPath("~/tem_body.doc"))

DocumentBuilder docBuilder = new DocumentBuilder(doc)

docBuilder.InsertHtml(txtContent.Value)

doc.Save(Server.MapPath("~/") + "/TestWord121.doc")

打开保存后的文件,My God,这样就可以了。再试试带图片的,也很不错,图片也可以正常在Word里面正常显示。看来此插件确实很强大啊,不过到目前还并没有解决我的问题。就是插入的位置问题。目前它是插入的头部,即Body的Paragraph 0 处。

接下来就是解决如何把HTML文本插入到指定位置,想了想得首先知道要插入的位置,度娘了一会发现了东东。DocumentExplorer,它可以查看Word文档里面的Doc结构。

速度找了一个,打开后就可以清晰地看到Word文档:

这样的话就知道自己要插入的位置在那个地方。最简单的就是设置好模板,找到要插入的位置节点。

Document temdoc = new Document(Server.MapPath("~/tem.doc"))

Document doc = new Document()

DocumentBuilder docBuilder = new DocumentBuilder(doc)

docBuilder.InsertHtml(txtContent.Value)

docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left

temdoc.AppendDocument(doc, ImportFormatMode.KeepSourceFormatting)

DocumentBuilder temdocBuilder = new DocumentBuilder(temdoc)

var temParas = temdocBuilder.Document.Sections[1].Body.Paragraphs

//int intIndexer = 0

foreach (Paragraph para in temParas)

{

// 这里面随便指定了一个位置,在Paragraphs的第六个节点处

temdocBuilder.Document.Sections[0].Body.InsertAfter(para.Clone(true), temdocBuilder.Document.Sections[0].Body.Paragraphs[5 + intIndexer - 1].NextSibling)

intIndexer++

}

temdocBuilder.Document.Sections.RemoveAt(1)

temdoc.Save(Server.MapPath("~/") + "/TestWord1212.doc")

再次保存后打开测试Word文档,符合自己的预期,解决了把HTML文本插入到Word文档的指定位置。再试试带图片的,结果发现Word文档里面有没有图片,回头想想,之前是可以正常保存且显示图片的,现在不显示图片而只显示一个叉叉,看来是因为图片路劲出问题了。

说一个非常简单的方法,就是通过content来实现,举个简单的例子:

a:after{content:"(" attr(href) ")"}这样所有a链接的url就会显示在链接的后面(#)。

但遗憾的是只有ie8及更高版本才支持 content 属性,这是我们所不希望的,那么我们就来自己写一个吧:

jQuery Code:

$('a').each(function(){

var url = $(this).attr('href')

$('<span></span>').text(url).insertAfter(this)

})

Xhtml Code:

<a href="http://www.baidu.com">百度</a><a href="http://zhidao.baidu.com">百度知道</a>

运行一下吧,所有浏览器里,所有链接的url就会跟在链接名的后面了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7129602.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存