2015-10-04 4 views
2

У меня очень простой скрипт, который я хочу изменить цвет текста на основе того, что он говорит.Изменить цвет на основе значения класса

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

Редактировать

Вот бритву

@if (item.StockLevel == 0) 
        { 
         <p class="js-stock-level"> 
          @item.StockText 
         </p> 
        } 
        else 
        { 
         <p class="js-stock-level"> 
          @item.StockText 
         </p> 
         <p>£@item.Price inc VAT</p> 

         <span>Quantity: </span><input type="number" style="width:35px" value="1" min="1" /><br /><br /> 
         <button class="btn btn-primary">Add to basket</button> 
        } 

ответ

0

Измените val() на text() и он будет работать.

+0

Похоже, что все идет прямо к другому и устанавливает цвет в зеленый цвет – JohnCooling

+0

Эй, проверьте эту демонстрацию http://jsfiddle.net/vn73uLxd/ – Diptox

0

Как уже упоминалось другие ответы, вы должны использовать .text() вместо .val() и вы сказали, что есть много элементов с одинаковым именем класса, и есть вероятность того, что элемент с текстом Sorry Not In Stock должен быть где угодно.

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

Надеется, что это помогает

$('.js-stock-level').each(function(Index, Obj) { 
 
    if ($(Obj).text() == "Sorry Not In Stock") { 
 
    $(Obj).css({ 
 
     'color': 'red', 
 
     'font-weight': 'bold' 
 
    }); 
 
    } else { 
 
    $(Obj).css({ 
 
     'color': 'green', 
 
     'font-weight': 'bold' 
 
    }); 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p class="js-stock-level">Sorry Not In Stock</p> 
 
<p class="js-stock-level">12 in Stock</p>

Update (По RAZOR)

@{ 
    var NoStockText = "Sorry Not In Stock"; 
    var StockText = "Sorry Not In Stock"; 
    } 
<p @if(StockText==NoStockText){<text>style='color:red;'</text>}>@StockText</p> 

И StockText Вашего @item.StockText

+0

Хм, это лучший ответ. Я не думаю, что это также может быть связано с тем, что контент создается с помощью Razor (C#). Поэтому, когда этот скрипт запускает его, jQuery не поймает его. – JohnCooling

+0

razor отображает HTML в pageload, поэтому напишите выше JS в 'document.ready', и для вашей информации вы можете достичь этого в RAZOR без JS. попробуйте использовать этот код перед тем, как использовать этот код, потому что использование этого даст пользователю проблему с глюком, сначала это будет черный или какой-то цвет по умолчанию, тогда он станет красным, что выглядит не очень хорошо. @JohnCooling –

+0

@JohnCooling, я обновил ответ. я просто использовал, если условие только для того, чтобы показать, как вы можете добиться этого в RAZOR. –

1

Пояснение

Если вы хотите изменить некоторые свойства CSS элемента на основе других атрибутов (например, текстовое значение в вашем примере), вы можете использовать .css(propertyName, function).

Однако, чтобы упростить стилизацию элемента, я бы рекомендовал использовать классы CSS. Чтобы изменить класс элемента, мы будем использовать другой метод jQuery, .addClass(function).

Пример 1 - с помощью .css (PropertyName функция)

$(document).ready(function() { 
 

 
    $('.js-stock-level').css('color', function(elm) { 
 
    var text = $(this).text(); 
 
    return (text == 'Sorry Not In Stock' ? 'red' : 'green'); 
 
    }); 
 

 
});
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
 

 
<p class="js-stock-level">Sorry Not In Stock</p> 
 

 
<p class="js-stock-level">12 in Stock</p>

Пример 2 - использование .addClass (функция)

var NOT_IN_STOCK_TEXT = 'Sorry Not In Stock', 
 
    NOT_IN_STOCK_CLASS = 'not-in-stock'; 
 

 
$(document).ready(function() { 
 

 
    $('.js-stock-level').addClass(function() { 
 
    return $(this).text() === NOT_IN_STOCK_TEXT ? NOT_IN_STOCK_CLASS : ''; 
 
    }); 
 

 
});
.js-stock-level { 
 
    color: green; 
 
} 
 
.js-stock-level.not-in-stock { 
 
    color: red; 
 
    font-weight: bold; 
 
}
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
 

 
<p class="js-stock-level">Sorry Not In Stock</p> 
 

 
<p class="js-stock-level">12 in Stock</p>

0

Удалось решить эту проблему с помощью Razor

См. Рабочий код ниже.

@if (item.StockText == "Sorry Not In Stock") 
       { 
        <p class="js-stock-level not-in-stock"> 
         @item.StockText 
        </p> 
       } 
       else 
       { 
        <p class="js-stock-level"> 
         @item.StockText 
        </p> 
        <p>£@item.Price inc VAT</p> 

        <span>Quantity: </span><input type="number" style="width:35px" value="1" min="1" /><br /><br /> 
        <button class="btn btn-primary">Add to basket</button> 
       } 

Как только я проверил текст, я просто добавил элемент класса «Не в запасе» к элементу.

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