我正在寻找一个jquery插件,用于在一个元素中显示多个突出显示的文本。我发现了一个非常受欢迎的插件,它就是http://bartaz.github.com/sandbox.js/jquery.highlight.html以及许多其他插件。
它们工作正常,但是如果我要突出显示与早期突出显示的文本重叠的文本,则不起作用。
有谁知道一个jQuery或JavaScript插件,它支持多个突出显示的文本并且正确突出显示重叠的文本?
最佳答案
如果添加一些小调整,就可以使用找到的highlighter plugin进行所有操作。
作为说明,我张贴了一个 fiddle ,以提速一个今天下午我迅速整理的工作示例:http://jsfiddle.net/4bwgA/
在这里,我将逐步介绍插件(OP所指)已经完成的所有工作,最后给出重叠的突出显示区域的解决方案。
荧光笔的作用是在您要应用的单词周围放置一个标签。所以如果你有
<p>Who is the quick brown fox?</p>
$("p").highlight("brown");
<p>Who is the quick <span class="highlight">brown</span> fox?</p>
$("p").highlight("brown fox");
$("p").unhighlight().highlight("brown fox");
<p>Who is the quick <span class="highlight">brown fox</span>?</p>
<p>Who is the quick <span class="highlight">brown</span> <span class="highlight">fox</span>?</p>
function mergenode(node) {
var parent1 = node.contents();
parent1.each(function (i) {
if (i > 0 && this.nodeType !== 1 && //if text node
this.data.search(/^\s*$/g) === 0 && //consisting only of hyphens or blanks
parent1[i - 1].nodeName === "SPAN" && //bordering to SPAN elements
parent1[i + 1].nodeName === "SPAN" &&
parent1[i - 1].className === "highlight" && //of class highlight
parent1[i + 1].className === "highlight") {
selected1.push(parent1[i - 1]
.textContent.concat(this.data, parent1[i + 1].textContent));
}
else if (this.nodeType === 1 &&
this.nodeName === "SPAN" &&
parent1[i + 1].nodeName === "SPAN" &&
this.className === "highlight" &&
parent1[i + 1].className === "highlight") {
selected1.push(this.textContent.concat(parent1[i + 1].textContent));
}
});
$(node).unhighlight().highlight(selected1);
}
<p>Who is the quick <span class="highlight">brown fox</span>?</p>
selected1)中,该数组在每个附加选择处都会添加一个值。selected1数组中,以便将来用于合并和重叠。 $("p").highlight(["brown fox","brown"]);
<p>Who is the quick <span class="highlight">brown fox</span>?</p>
words = words.sort(function (str1, str2) {
return (str1.length < str2.length) ? 1 : 0;
});
toselect中,最后将其附加到原始words数组中。可能会有一些无用的组合,但不会造成伤害-它们不会在最后显示。 function overlap(a, b) {
var l = b.length,
m = a.length;
for (var j = 1; j < l; j++) {
if (a.indexOf(b.substr(l - j)) === 0) {
toselect.push(b.concat(a.substr(j)));
} else if (a.substr(m - j).indexOf(b.substr(0, j)) === 0) {
toselect.push(a.concat(b.substr(j)));
}
}
}
words数组中所有可能的元素对。我们可以循环循环进行此操作,但我对此有些兴奋,并做到了 $.each(arr, function (i) {
$.each(arr.slice(i + 1), function (i, v) {
overlap(arr[i], v);
});
});
toselect数组(其中所有可能的重叠字符串都已串联在一起)附加到原始words数组中。selected1数组中)。 words数组selected1附加到words words中组合所有部分重叠的字符串对,然后将新的组合字符串添加到words中(使用overlap函数及其遍历整个数组的包装器-在 fiddle 示例中为overdiag)words进行排序,因此最长的字符串将排在首位words的所有字符串mergenode函数)selected1 关于javascript - jQuery/JavaScript插件,用于突出显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018174/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c