2013-11-18 4 views
0

Я заметил множество примеров таргетинга на определенные работы в заголовке или div, используя jQuery, но то, что я за ним, немного отличается.Включите последние две буквы слова с jquery?

Я использую Jigoshop для сайта электронной коммерции и хотел бы сделать десятичные знаки цены на продукты меньшими, чем остальные цифры.

В настоящее время Jigoshop экспорт из цены так:

<div class="price">£300.00</div> 

Но в идеале, я хотел бы это:

<div class="price">£300.<span class="decimals">00</span></div> 

Полная остановка/десятичный всегда можно использовать в качестве разделителя если это помогает.

Любая помощь будет оценена!

Thanks,

Adam.

ответ

2

Самый простой способ будет

$(".price").html(function(index, oldHtml){ 
    return oldHtml.replace(/(\d\d)$/, "<span class='decimals'>$1</span>"); 
}); 

EDIT: фиксированный, так что он работает на нескольких ценах. Так что же, как и верхний ответ, с несколько иным RegExp (вероятно, быстрее, но я сомневаюсь, что это будет делать большую часть разницы)

+0

oh yes ... gosh confusing, когда люди меняют код, когда я пытаюсь изменить его тоже :-) – gotofritz

+1

Прошу прощения за редактирование. Кстати, вы сделали ту же «ошибку», что и я, предполагая, что существует только одна «цена». Вы можете принять это во внимание. –

2
var price = $('.price').text(); 
price = price.split('.'); 
$('.price').html(price[0] + '.<span class="decimals">' + price[1] + '</span>'); 

Но следует помнить, что изменения DOM с помощью JS для архивирования некоторого стайлинга несколько плохая практика!

Если у вас есть несколько цены:

$('.price').each(function() { 
    var price = $(this).text(); 
    price = price.split('.'); 
    $(this).html(price[0] + '.<span class="decimals">' + price[1] + '</span>'); 
} 
+1

Я думаю, что у него несколько цен на странице. Ваш совет - спот-на tho –

+0

Спасибо Дэвиду, я добавил фрагмент для этого случая. –

1

fiddle Demo

$('div.price').html(function (_, old_html) { 
    return old_html.substr(0, old_html.indexOf('.')) + '<span class="decimals">' + old_html.substr(old_html.indexOf('.')) + '</span>'; 
}); 


.html()

5

Попробуйте

$(".price").html(function(i, html){ 
    return html.replace(/(\.\d+)$/, '<span class="decimals">$1</span>') 
}); 

Демонстрация: Fiddle

+0

да, это лучше для нескольких цен на странице – gotofritz

+0

Beautiful! Работает. Спасибо. – user3004305

+0

К сожалению ... Я понял, что в идеале я хотел бы включить десятичное место в промежутке. Это возможно? – user3004305

0

Что вы пытаетесь сделать, это Действительно плохо Практика. Однако вот как вы это сделаете.

$('.price').each(function() { 
    var p = $(this); 
    var t = p.text().split('.'); 
    var s = $('<span></span>'); 
    s.attr('class', 'decimals'); 
    s.text(t[1]) 
    p.text(""); 
    p.text(t[0] + "."); 
    p.append(s); 
}); 

jsfiddle.

+0

Почему эта «действительно плохая» практика? – user3004305

+0

Создание структуры DOM - это то, что должно быть сделано, кто выдает ее, а не клиент. – Saturnix

Смежные вопросы