2016-09-27 52 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]); 
    } 
}