我对此代码有一个问题。它选择前三个关键字。如果我想在随机数中选择关键字怎么办?目前,它有7个关键字,它选择前三个。如果我想选择关键字3,6,7该怎么办?我怎么能在这里做随机函数?
(function($) {
$.fn.replacetext = function (target, replacement, max) {
var limit = max || -1;
var $textNodes = this
.find("*")
.andSelf()
.contents()
.filter(function () {
return this.nodeType === 3 && !$(this).parent("a").length;
});
$textNodes.each(function (index, element) {
var $element = $(element);
var words = $element.text().split(/\b/);
var matches = 0;
var text = words.map(function (word, index) {
if (matches >= limit) {
return word;
}
if (word.match(target)) {
++matches;
return word.replace(target, replacement);
}
return word;
});
$element.replaceWith(text.join(''));
});
};
})(jQuery);
$("p").replacetext(/\bdress\b/gi, "<a href='http://www.google.com'>$&</a>", 3);
答案 0 :(得分:0)
您可以通过以下方式实现以下行为:
在为文本节点循环时,使用以下代码在每个文本节点中查找最大随机数:
var ranMax = $element.text().match(target).length
然后generate a set of random number介于以下范围(1到最大随机数)
之间var arr = []
while (arr.length < max) {
var randomnumber = Math.ceil(Math.random() * ranMax)
var found = false;
for (var i = 0; i < arr.length; i++) {
if (arr[i] == randomnumber) {
found = true;
break
}
}
if (!found) arr[arr.length] = randomnumber;
}
检查匹配索引是否在随机数集replace the value中,否则返回原始值。
var nth = 0;
value = value.replace(target, function (match, i, original) {
nth++;
return jQuery.inArray(nth, arr) > -1 ?
match.replace(target, replacement) :
match;
});
按照上述步骤,您可能会达到预期的行为。
有关工作示例,请参阅以下小提琴:http://jsfiddle.net/zeskysee/14xjw4dr/2/
希望这有帮助:D