这是在博客上,所以服务器端解析是不可行的。目标是每次我提到一个股票代码,前面有一个美元符号(例如$ AAPL),它会将该纯文本转换为链接和其他html(我喜欢有一个弹出图表,有一些html) 。
我对经常寻求帮助感到不满意,特别是当它构成所涉及的大部分代码时,我似乎无法解决这个问题。
以下是html的示例,其中找到的股票代码的每个实例都会显示在页面上(DSW是示例股票代码):
<a href="http://finviz.com/quote.ashx?t=DSW " onMouseOver="var newimgDSW =img_create('DSW ');slink=getElementById('slinkDSW ');thelink=this;var arx=getPos(thelink); var posx=arx[0]+90;var posy=arx[1]-75;var x=document.getElementById('stockDSW ');x.style.position='absolute';x.style.display='block';x.style.left=posx+'px';x.style.top=posy+'px';" onMouseOut="document.getElementById('stockDSW ').style.display='none';" target="external">$DSW</a>
我相信正则表达式应该类似于:
new RegExp('\\b\\$[a-z]+\\b','gi');
它还需要只在class =&#34; post_hentry&#34;内进行交换。防止非帖子内容出现问题。
感谢您的帮助。目前没有使用jQuery,但为了做到这一点,我们会设置它。
更新。就我而言,它似乎没有找到股票行情,所以这是一个糟糕的正则表达式吗?我也不确定替换代码在正则表达式中使用$ 1是否正确。
$(document).ready(function(){
var posts = document.getElementsByClassName('post-body entry-content');
for(var i=0; i<posts.length; i++)
{
posts[i].innerHTML = posts[i].innerHTML.replace(/\b\$[A-Za-z]+\b/g,'<a href="http://finviz.com/quote.ashx?t=$1" onMouseOver="var newimgDSW =img_create(\'$1\');slink=getElementById(\'slink$1\');thelink=this;var arx=getPos(thelink); var posx=arx[0]+90;var posy=arx[1]-75;var x=document.getElementById(\'stock$1 \');x.style.position=\'absolute\';x.style.display=\'block\';x.style.left=posx+\'px\';x.style.top=posy+\'px\'" onMouseOut="document.getElementById(\'stock$1\').style.display=\'none\'" target="external">$1</a>');
}
});
以下是没有任何反应的页面:http://adamtrades.blogspot.com/2014/09/exiting-bax-staying-in-pcln-for-now.html
更新,现在感谢vks和他链接的正则表达式网站。这是最终的代码,包括图像创建和定位。
$(document).ready(function(){
var posts = document.getElementsByClassName('post-body entry-content');
for(var i=0; i<posts.length; i++)
{
posts[i].innerHTML = posts[i].innerHTML.replace(/\$([A-Z]+)\b/g,'<a style="text-decoration:none" href="http://finviz.com/quote.ashx?t=$1" onMouseOver="var newimg$1=img_create(\'$1\');slink=getElementById(\'slink$1\');thelink=this;var arx=getPos(thelink); var posx=arx[0]+90;var posy=arx[1]-75;var x=document.getElementById(\'stock$1\');x.style.position=\'absolute\';x.style.display=\'block\';x.style.left=posx+\'px\';x.style.top=posy+\'px\'" onMouseOut="document.getElementById(\'stock$1\').style.display=\'none\'" target="external">$1</a>');
}
});
function getPos(ele){
//var elex = document.getElementById(ele);
var elex = ele;
//var elex = document.this;
var x=0;
var y=0;
while(true){
x += elex.offsetLeft;
y += elex.offsetTop;
if(elex.offsetParent === null){
break;
}
elex = elex.offsetParent;
}
return [x, y];
}
function img_create(alt) {
if (!(document.getElementById('stock'+unescape(alt))))
{
var img= document.createElement('img');
img.src= 'http://finviz.com/chart.ashx?s=m&p=d&t='+unescape(alt).replace('.','-');
img.id= 'stock'+unescape(alt);
img.cssText= 'display:none;position:absolute;';
img.style.border= '1px solid #000';
img.style.zIndex='99';
document.body.appendChild(img);
return img;
}
}