需要一个在页面上找到股票代码的脚本,并替换为html / link

时间:2014-09-04 03:31:43

标签: javascript regex replace stocks

这是在博客上,所以服务器端解析是不可行的。目标是每次我提到一个股票代码,前面有一个美元符号(例如$ 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;
    }
}

0 个答案:

没有答案