作为参数传递的函数,具有未定义的自身参数,仍具有值

时间:2013-03-25 08:32:46

标签: javascript

我正在使用稍微修改过的版本,将关键字转换为另一个问题中显示的链接。

代码有一些遗漏,如下:

$(".keyword_search").each(function() {
    var targetword = 'TEST';
    var explanation = 'Is something you do to find out if stuff works';
    //targetword and explanation actually defined in a loop, but omitted here  
    var content = $(this)[0];
    var re = new RegExp("(\\b"+targetword+"\\b)", "gi");
    content.innerHTML = content.innerHTML.replace(re,keywordconvert);
}

function keywordconvert(str, p1, offset, s ) {
     return '<a href="#" data-toggle="tooltip" title="'+p1+'">'+p1+'</a>';
}

我对此代码的问题很少。

1) keywordconvert 的参数在哪里定义? str p1 都包含要替换的字符串, offset 包含内容中单词的起始点, s < / em>包含内容

2)我如何将解释字符串添加到 keywordconvert 函数中链接的 title -class?换句话说,如何向此函数添加参数?

任何帮助都会受到赞赏,我已经在网上搜索了很长时间的答案。

1 个答案:

答案 0 :(得分:2)

  

1)keywordconvert的参数在哪里定义?

String#replace定义。当您使用正则表达式作为搜索并使用函数作为替换来调用replace时,它会使用匹配的字符串,定义的任何捕获组以及匹配发生的偏移量调用函数,最后调用字符串本身。由于传入的正则表达式定义了一个捕获组,这意味着str将是匹配的子字符串,p1将是捕获组的内容,offset将是索引(字符串中的{offset},s将是调用replace的整个字符串。

  

2)我如何将解释字符串添加到keywordconvert函数中链接的title-class?

您可能必须在each迭代器函数中创建自己的函数,这是不理想的,例如:

$(".keyword_search").each(function() {
    var targetword = 'TEST';
    var explanation = 'Is something you do to find out if stuff works';
    //targetword and explanation actually defined in a loop, but omitted here  
    var content = $(this)[0];
    var re = new RegExp("(\\b"+targetword+"\\b)", "gi");
    content.innerHTML = content.innerHTML.replace(re,function(str, p1, offset, s) {
        return keywordconvert(str, p1 + explanation, offset, s);
    });
});

请注意,我p1 + explanation的位置我假设您想要做一些更有趣的事情,但p1设置title