PebbleRoad glossarizer插件 replaceOnce 是插件的参数,每个节点替换一次(HTML标记)而不是每页一次,并且它可以正常工作。我希望它每页更换一个。
示例:
您有多个<p>
和<div>
个标签,其中包含“疾病”一词,Glossarizer会将该单词的每个副本替换为包含“疾病”一词的HTML 加上工具提示下划线。我希望单词/短语仅在第一次出现时被替换,而其他时间被忽略,这意味着在return match
之前更改代码。
Jsfiddle突出显示 START OF CODE TO CHANGE 注意:目前没有运行js,我可能会错过一个jsfiddle选项,可能与getJSON有关?
问题代码段,问题出现在最后几行:
/**
** START OF CODE TO CHANGE
**/
for(var i =0; i < nodes.length; i++){
this.traverser(nodes[i])
}
/** Callback */
if(this.options.callback) this.options.callback.call(this.$el)
},
/** Traverses through nodes to find the matching terms in TEXTNODES */
traverser: function(node){
var next,
base = this;
if (node.nodeType === 1) {
/* Element Node */
if (node = node.firstChild) {
do {
// Recursively call traverseChildNodes
// on each child node
next = node.nextSibling
/** Check if the node is not glossarized */
if( node.className != this.options.replaceClass) {
this.traverser(node)
}
}
while(node = next)
}
} else if (node.nodeType === 3) {
/* Text Node */
var temp = document.createElement('div'), data = node.data;
var re = new RegExp('(?:^|\\b)('+this.cleanedTerms+ ')(?!\\w)', base.regexOption), reEx = new RegExp('(?:^|\\b)('+this.excludedTerms+ ')(?!\\w)', base.regexOption);
if(re.test(data)){
var excl = reEx.exec(data);
data = data.replace(re,function(match, item , offset, string){
if(base.options.replaceOnce && inArrayIn(match, base.replaced) >= 0){
return match;
到目前为止,我已经设法隔离了我认为问题的位置,而且我很确定它不是RegEx,它需要一个变量(数组?)来存储是否每个术语已在页面中替换。
我迷失在哪里以及表达式应该是什么来设置数组中的变量。