2014-02-05 1 views
0

Я новичок в javascript, так что это может быть глупый вопрос. Я пытаюсь создать скрипт, который принимает фразу «(x items)» и изменяет ее на «(x)», где x может представлять любое число.Необходимая переменная Javascript, которая может представлять любое число

Вот что я сейчас:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     function changeText(){ 
      $(".CartLink:contains('2 items')").html('<a href="/cart.php">Cart <span>(2)</span></a>'); 
      } 
     changeText(); 
     $(document).ajaxSuccess(function() { 
     changeText(); 
     }); 
    }); 
</script> 

выше сценарий способен заменить фразу «(2 шт)» с «(2)», но мне нужно изменить сценарий так, что 2 может быть любой номер. Спасибо.

Это HTML, что .CartLink элемент содержит:

<li style="display:" class="CartLink"><a href="/cart.php">Cart <span>%%GLOBAL_CartItems%%</span></a></li> 
+2

@lordvlad: это не тот вопрос, о котором идет речь. – Cerbrus

+1

Какой элемент html содержит элемент '.CartLink', прежде чем изменять его? –

+0

мой плохой. я перепутал что-то ... – lordvlad

ответ

0

В идеале это должна быть задача на стороне сервера. Но если у вас есть ограничение, требующее, чтобы вы сделали это на стороне клиента ...

Вам не нужно заменять все html. Вы можете просто изменить текст span:

$('.CartLink span').text(function(_, val) { 
    return val.replace(' items', ''); 
}); 
+0

Это решение работает до сих пор. Единственная проблема заключается в том, что страница должна обновляться, чтобы сценарий работал после добавления нового элемента в корзину. Есть ли решение, о котором вы знаете? – taylorjohnston

+0

Выполняете ли вы этот фрагмент каждый раз, когда элемент добавляется в корзину? –

+0

Я добавляю фрагмент к нижнему колонтитулу, поэтому я думаю, что он выполняется только тогда, когда страница обновляется. Когда элемент добавляется в корзину, появляется всплывающее окно, но обновление страницы не происходит. Помогло бы это, если бы я добавил скрипт во всплывающий код? – taylorjohnston

0

Вы можете использовать раскол, чтобы отделить их количество и текст.

http://jsfiddle.net/B2meD/

$(document).ready(function() { 
    $(".CartLink").html('<a href="/cart.php">Cart <span>'+$(".CartLink").text().split(" ")[0]+'</span></a>'); 
}); 
+0

Не думаю, что это вопрос о том, , И 'String.split (" ") .pop()' более эффективен, чем выбор, плюс вы хотите выбрать элемент LAST в массиве. Таким образом, [1] будет выбором. –

0

Javascript в виде строки заменить метод. Таким образом, вы можете просто удалить часть элементов.

var foo = ('2 items'); 
var newFoo = foo.replace("items", ""); 

Тогда newFoo станет ('2')

+1

Нет, ваш скрипт делает newFoo ('2') ... –

+0

На самом деле, я просто протестировал это. оповещения (newFoo); просто дал мне 2. 'var foo = (" '2 items' ") '; предупреждения «2». Но кто заботится lol – CSharper

+0

На самом деле, есть место за 2 независимо от того, что вы говорите. Вам нужно будет сделать foo.replace ("items", ""); '. В любом случае, не так хорошо, как метод '.split()'. –

0

Где вы получаете "2" переменную из?

var items = 2; 
items ++; //items = 3; 
$('.Cart').html("Items in cart:" + items.toString() + ". Foo"); 

Посмотрите, как я добавил «+», чтобы добавить строки?

Я должен добавить, это просто плохой js.

Для внесения элементов переменной:

var str = "(Items 2)"; 
var numberStr = "(" + str.split(" ").pop(); //makes "(2)" or use .replace or whatever works. 

Имейте в виду, что делает переменную из строки приведет к другой строке. Если вы хотите, чтобы манипулировать свой новый товар вар как число, вы должны получить целое, как это так,

var numberStr = "(3)"; 
var int = parseFloat(numberStr.replace(/["'()]/g,"")); 
0

S ('CartLink '). Текст ($ ('. CartLink'). Текст() .split ('') [0])

0

Если заменить функцию changeText с этим он должен работать, как вы хотите:

function changeText() { 
    var itemCountSpan = $(".CartLink a span") 
    if (/(\d+) items/.test(itemCountSpan.text())) { 
     itemCountSpan.text(RegExp.$1); 
    } 
} 
0

Вот простой RegEx версия.

$(document).ready(function(){ 
    function changeText(){ 
     $(".CartLink").each(function() { 
      var newhtml = $(this).html().replace(/\((\d+) items\)/, "($1)"); 
      $(this).html(newhtml); 
     }); 
    } 
    changeText(); 
}); 

Он смотрит на каждый элемент с классом CartLink для строки (x items) где х представляет собой один или более цифр и удаляет слово «элементы». $1 - это свойство, которое устанавливается, когда выполнено совпадение в скобках (\d+), что позволяет нам использовать номер, который мы хотим, в нашей заменяемой строке.

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