एक बुकिंग प्लगइन कीमतों को 2 दशमलव के साथ एक संख्या के रूप में दिखाता है। चूंकि मुझे हुक करने के लिए फ़िल्टर नहीं मिल रहा है, मुझे लगता है कि मुझे शायद एक जेएस लूप चाहिए।

एक पृष्ठ पर $123,45 जैसी कीमतों के साथ कई संपत्तियां हैं। मैं इसे $123 . तक गोल करना चाहता हूं

कीमतों का एचटीएमएल है:

<span class="price"><span class="currency">$</span>"123,45<span>

मैंने एक लूप की कोशिश की, लेकिन मैं जेएस में वास्तव में अच्छा नहीं हूं:

  function roundPrice() {

let oldPrices = document.getElementsByClassName("price");

for (let i = 0; i < oldPrices.length; i++) {

    // strip $ of price
    oldPrices[i] = oldPrices[i].substr[1];

    // string to num
    oldPrices[i] = parseInt(oldPrices[i]);

    // round number
    let newPrice = Math.round(oldPrices[i]);

        return oldPrices[i] = newPrice;

    }
}

    roundPrice();

लेकिन ये काम नहीं हुआ. क्या ऐसा कोई समाधान है?

बहुत बहुत धन्यवाद, सामू

0
Sander vd W 1 पद 2020, 19:25

1 उत्तर

सबसे बढ़िया उत्तर

इस प्रश्न के दो भाग हैं: फ़ंक्शन कैसे लिखें ताकि यह प्रासंगिक DOM तत्वों में कीमतों को बदल सके और Wordpress में फ़ंक्शन को कैसे चलाए।

पहला भाग लेते हुए, प्रश्न में कोड में कुछ समस्याएं थीं। तत्काल मुख्य बात यह है कि document.getElementsByClassName("price") तत्वों का एक संग्रह देता है, न कि तारों की एक सरणी।

इन तत्वों के माध्यम से पुनरावृति करने और उनके HTML में हेरफेर करने के लिए क्या करना है, यह समझने के लिए कृपया इस कोड को देखें।

function roundPrice() {
let oldPrices = document.getElementsByClassName("price");//this gives you the collection of elements which have class price

for (let i = 0; i < oldPrices.length; i++) {

    // Note: oldprices[i] is an element NOT a string
    let price = oldPrices[i].innerHTML;//this should give you <span class="currency">$</span>"123,45

    let priceArray = price.split('>');//this will give you an array and you want the last bit
    let oldPrice = priceArray.pop();

    
    //now you have the actual price, but with , where JS would expect .
    oldPrice = oldPrice.replace(',','.');
    
    //now you can do the rounding
    let newPrice = Math.round(Number(oldPrice));// NOT parseInt

    //now we put the new price back into the element's innerHTML
    priceArray.push(newPrice);

    //then we write the innerHTML back into the element
    oldPrices[i].innerHTML = priceArray.join('>');
    }
}
//it would be a good idea to put some prefix of your own on this function name so it doesn't clash with any other plugin using function round
    roundPrice();
<span class="price"><span class="currency">$</span>1234567,89</span>
<span class="notprice"><span class="currency">$</span>9999,01</span>
<span class="price and some"><span class="currency">$</span>888</span>
<span class="price"><span class="currency">$</span>123,45</span>
<span class="price"><span class="currency">$</span>123</span>

दूसरा भाग यह है कि इस जेएस को संबंधित वर्डप्रेस पेज से कैसे जोड़ा जाए। टिप्पणियों के जवाब में कुछ और जानकारी की आवश्यकता है, इससे पहले कि हम अंततः यह तय कर सकें, लेकिन याद रखने वाली एक महत्वपूर्ण बात यह है कि इसे डीओएम लोड होने के बाद चलाया जाना चाहिए।

नोट: यद्यपि उपरोक्त कोड कोडिंग पर प्रश्न का उत्तर देता है जैसा कि इसे सेट किया गया था, यह यकीनन इसे प्राप्त करने का सबसे अच्छा तरीका नहीं है। HTML को 'ऑन द फ्लाई' में इस तरह बदलने से अन्य समस्याएं हो सकती हैं - कम से कम यदि प्लगइन डेवलपर HTML के प्रारूप को बदल देता है। क्या प्लगइन को बदलने का कोई तरीका है उदा। मुद्रा के लिए कुछ सेटिंग चुनकर?

0
A Haworth 3 पद 2020, 23:13