2013-07-22 2 views
2

Наша текущая корзина не позволит нам исключать определенные состояния из бесплатной доставки через их программное обеспечение, поэтому я пытаюсь написать сценарий для удаления бесплатной секции доставки, когда введено определенное состояние ,Удалить элемент только в том случае, если все верно.

Я был у него часами и не мог найти ответ нигде в Интернете или через тестирование. Любой, кто мог бы указать мне в правильном направлении, был бы моим героем. Я очень новичок в jQuery, JavaScript и т. П., Поэтому, пожалуйста, простите меня, если это глупый простой вопрос.

<div> 
<div>HONOLULU, <span id="state">OK</span> 96819</div> 
<ul> 
    <li>$0.00 - Free Shipping</li> 
    <li>$16.39 - UPS Ground</li> 
    <li>$21.50 - UPS 2nd Day Air®</li> 
    <li>$36.39 - UPS Next Day Air®</li> 
    <li>$0.77 - First Class Mail</li> 
    <li>$6.26 - Priority Mail</li> 
</ul> 

$(document).ready(function() { 

if ($('#state:contains("HI" || "AK")')); { 
    $('li:contains("$0.00")').remove(); 

} }); 

Когда вы измените <li>$0.00 - Free Shipping</li> на любой другой номер он появляется в списке, как это должно быть, но независимо от того, в каком состоянии я в <span id="state">, если есть в списке <li>$0.00 - Free Shipping</li> это удален.

Из всех исследований, которые я делал, мой код кажется прав, но он не работает. Here's the Fiddle.

+1

вы имели в виду поставить точку с запятой в конце вашей 'если 'line? Хотя это не решит проблему. – Sparky

+0

@ Dracorat, мой комментарий - не ответ. Вы не можете использовать 'или' внутри селектора. Как вы можете видеть ниже, пользователи не тратят время, чтобы прочитать другие ответы перед ответом. – Sparky

+0

@ Dracorat, но jsFiddle ** не работает **. Обратите внимание, как условие «истинно», когда оно явно должно быть «ложным»? http://jsfiddle.net/9Kpyy/4/ – Sparky

ответ

5

С кодом есть несколько проблем. Во-первых, потеряйте ; в своем заявлении if.

Это должно быть просто:

if(condition){ 
    // code 
} 

Во-вторых, вы не можете использовать || подобное. Вы должны сделать это так:

$('#state:contains("HI"),#state:contains("AK")') 

Наконец, делая if($jQueryObject) не то, что вы хотите. Это всегда будет правдой. Вы хотите проверить .length.

Таким образом, это должно быть так:

if ($('#state:contains("HI"),#state:contains("AK")').length) { 
    $('li:contains("$0.00")').remove(); 
} 
+0

Спасибо, что не только ответил на мой вопрос, но и потратил время, чтобы указать, где я ошибся. – user2608038

+0

Добро пожаловать :-) –

5

:contains("HI" || "AK") соответствует точной строке "HI" || "AK", нет OR.

if ($('#state:contains(HI)').length || $('#state:contains(AK)').length) { 
    $('li:contains("$0.00")').remove(); 
} 

FIDDLE

EDIT:

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

+2

Стоит отметить, что вам нужно проверить длину, как и в примере, потому что любой селектор jQuery вернет * truey *. – David

1

Это один работал для меня:

if ($('#state').text()=='HI' || $('#state').text()=='AK') { 
     $('li:contains("$0.00")').remove(); 
} 

http://jsfiddle.net/9Kpyy/2/

+3

Но он будет работать только с точным текстом 'HI' или' AK', поэтому ** ** не совпадает с использованием ': contains()'. даже пробел отбросит это. – adeneo

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