我想将某些关键词转换为我网站上的联盟链接。我不想在每个页面中手动编写每个链接的代码。所以我正在寻找一个基于Javascript / Jquery的解决方案,在页面加载时使用给定的关键字列表和相应的URL(二维数组),这些关键字使用相应的URL进行“URL化”。
我发现此评论Find text string using jQuery?包含不区分大小写搜索的代码,但它会对整个文本节点进行网址化,而不仅仅是单词。
我可以使用类似下面的代码。但问题是它会对<pre>
元素中的关键字进行URL化。我希望它们仅在<p>
元素内进行URL化。
<script type="text/javascript">
(function($) {
var thePage = $("body");
thePage.html(thePage.html().replace(/testing/ig, '<a href="http://testing.com">testing</a>'));
})(jQuery)
</script>
例如:
<p>I'm going to test urlification</p>
<pre>
function test() {
alert(' test ');
}
</pre>
应该改为
<p>I'm going to <a href="test123.com">test</a> urlification</p>
<pre>
function test() {
alert(' test ');
}
</pre>
答案 0 :(得分:3)
/**
* jQuery plugin to replace text strings
*
* Taken from @link http://net.tutsplus.com/tutorials/javascript-ajax/spotlight-jquery-replacetext/
*/
$.fn.replaceText = function( search, replace, text_only ) {
return this.each(function(){
var node = this.firstChild,
val, new_val, remove = [];
if ( node ) {
do {
if ( node.nodeType === 3 ) {
val = node.nodeValue;
new_val = val.replace( search, replace );
if ( new_val !== val ) {
if ( !text_only && /</.test( new_val ) ) {
$(node).before( new_val );
remove.push( node );
} else {
node.nodeValue = new_val;
}
}
}
} while ( node = node.nextSibling );
}
remove.length && $(remove).remove();
});
};
// the array of affiliate links
var affiliates = [
['google', 'http://www.google.com/'],
['bing', 'http://www.bing.com/'],
['yahoo', 'http://www.yahoo.com/']
],
$p = $('p'), // the selector to search text within
i = 0, // index declared here to avoid overhead on the loop
size = affiliates.length, // size of the affiliates array
// again declared here to avoid overhead
reg; // the regex holder variable
// loop over all the affiliates array
for(i; i < size; i++){
// create a regex for each affiliate
reg = new RegExp('('+affiliates[i][0]+')','gi');
// finally replace the string with the link
// NOTE: do not forget to include the aforementioned plugin before this code,
// otherwise this won't work
$p.replaceText(reg, '<a href="'+affiliates[i][2]+'">$1</a>');
}
您所要做的就是更改jQuery选择器和附属组件阵列。其余的将由插件处理。 该插件非常智能,不会替换元素的属性。
答案 1 :(得分:1)
像 -
var foundin = $('p:contains("I am a simple string")');
foundin.each(function () {
var linktext = $(this).html().replace('I am a simple string','<a href="">I am a simple string</a>');
$(this).html(linktext);
});
或使用您的示例 -
var foundin = $('p:contains("testing")');
foundin.each(function () {
var linktext = $(this).html().replace(/testing/ig, '<a href="http://testing.com">testing</a>'));
$(this).html(linktext);
});
答案 2 :(得分:0)
你试过这个:
将它们放在带有“URLify”类的span中,并根据您获得的数据,通过使用您的代码动态创建URL来替换span的innerText
Here is some text with this <span class="URLify">DataItem</span> to be search and replaced with URL or just to be URLified
在你的jQuery中你可以做这样的事情(未经测试)
var URL = "http://www.myapp.com/ListOfItems/"; //the url to use or append item to
$('.URLify').wrapInner('<a href="'+URL+'"></a>');
或者如果你想将“DataItem”附加到“... / ListOfItems /”你也可以这样做......
答案 3 :(得分:0)
JQuery不会为您提供文本节点。您将不得不使用JQuery过滤器显式检查文本节点,只需遍历DOM(在这种情况下可能更快)。给出了一个例子here on SO。