2016-09-27 58 views
1

我有一个在线商店,有限制的访问作出任何正确的编辑代码。添加Javascript替换跨度标签

我试图实施适当的价格模式,因为他们有:

<span itemprop="price">$57.00</span> 

这是不正确。

它需要建立这样

<span itemprop="priceCurrency" content="USD">$</span> 
<span itemprop="price">57.00</span> 

有什么用JavaScript或jQuery的,可以通过分离的货币符号和价格操纵呢?

感谢

+0

好的,操纵DOM节点是JavaScript在浏览器中的主要目的。你卡在哪里? – 2016-09-27 19:26:00

+0

我认为JS不会帮助你的情况。这将会延迟,因为DOM –

回答

1

你得到文本:

var html = '$57.00'.replace(/([^\d])(\d+)/, 
function(all, group1, group2){ 
return 'some html here =' + group1 + '= more hear =' + group2 }); 
0

沿

// find all span's with itemprop price 
document.querySelectorAll("span[itemprop='price']").forEach(function(sp){ 
    // grab currency (first char) 
    var currency = sp.innerText.substr(0,1); 
    // remove first char from price val 
    sp.innerText = sp.innerText.substr(1); 

    // create new element (our price-currency span) 
    var currencySpan = document.createElement("span"); 
    currencySpan.innerText = currency; 
    currencySpan.setAttribute("itemprop", "priceCurrency"); 
    currencySpan.setAttribute("content", "USD"); 


    // Append it before the old price span 
    sp.parentNode.insertBefore(currencySpan, sp); 
}); 
行财产以后:

var value = $("span[itemprop='price'").text(); 

然后,你可以使用正则表达式像生成HTML

应该做你以后的事情。在

观看演示:https://jsfiddle.net/dfufq40p/1/(更新,使效果更明显)

-1

这里是你如何使这项工作的建议,虽然我不建议做这样的(很多情况下为content="")。

Example您可以用来将不正确格式转换为正确格式的逻辑。

希望你觉得它有用。 :]

0

也不可能是100%无缺陷,但它应该让你开始:

<script type="text/javascript"> 
var n = document.getElementsByTagName('*') 
for(var i=0;i<n.length;i++) 
{ 

    if(n[i].hasAttribute('itemprop')) //get elements with itemprop attribute 
    { 
    var p = n[i].parentNode 

    var ih = n[i].innerHTML //grab the innerHTML 
    var num = parseFloat(ih) //get numeric part of the innerHTML - effectively strips out the $-sign 

    n[i].innerHTML = num 

    //create new span & insert it before the old one 
     var new_span = document.createElement('span') 
     new_span.innerHTML = '$' 
     new_span.setAttribute('itemprop', 'priceCurrency') 
     new_span.setAttribute('currency', 'USD') 

     p.insertBefore(new_span, n[i]) 
    } 
} 
</script> 
+1

parseFloat中的最初价格不会在“$”字符上失败:[parseFloat on non-numeric char](http://stackoverflow.com/a/7264816/5758637) –

0

这应该工作 - querySelectorAll应该有点快,而且正则表达式将不仅仅是工作美元,我相信。

function fixItemPropSpan() { 
    var n = document.querySelectorAll('[itemprop]'); 
    for (var i = 0; i < n.length; i++) { 

    var p = n[i].parentNode; 
    var ih = n[i].innerHTML; 
    var num = Number(ih.replace(/[^0-9\.]+/g, "")); 

    n[i].innerHTML = num; 

    //create new span & insert it before the old one 
    var new_span = document.createElement('span'); 
    new_span.innerHTML = '$'; 
    new_span.setAttribute('itemprop', 'priceCurrency'); 
    new_span.setAttribute('currency', 'USD'); 

    p.insertBefore(new_span, n[i]); 
    } 
}