每个页面替换一个文本,而不是每个节点替换一次 - 在javascript词汇表中

时间:2015-09-11 16:43:28

标签: javascript replace jquery-plugins nodes glossary

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,它需要一个变量(数组?)来存储是否每个术语已在页面中替换。

我迷失在哪里以及表达式应该是什么来设置数组中的变量。

0 个答案:

没有答案