У меня есть этот HTML:
<p>
(rcvd)
<a href="linkhere">Title</a>
by Person,
<br></br>
- More text
</p>
И я хочу изменить цвет (rcvd) на зеленый. Я попробовал следующее:
Это изменяет всю строку на зеленый, но сохраняет ссылку
$ ( "Р: содержит ( '(Rcvd)')") атр ( "стиль", "цвет: зеленый.");
Это изменяет часть rcvd на зеленый, но удаляет ссылку Title
$("p").each(function() {
var text = $(this).text();
text = text.replace("(rcvd)", "<span style='color:green;'>(rcvd)</span>");
$(this).html(text);
});
Это ничего не делает, но я думаю, что это решение, которое я хочу с небольшой настройкой где-то, что мне не хватает
$(p).html($(p).html().replace("(rcvd)","<span style='color:green;'>(rcvd)</span>"));
Любые указатели приветствуются (я все еще новичок в JQuery и стараюсь учиться, поэтому мне хотелось бы объяснить, почему вы делаете предложение, которое вы делаете.
Мое собственное предложение было бы:
$('p').html(function(i,h){
return h.replace('(rcvd)', '<span class="greenColoured">(rcvd)</span>');
});
Использование CSS для обеспечения стиля:
.greenColoured {
color: green;
}
Как отметил TrueBlueAussie (в комментариях ниже), я не объяснил параметры анонимной функции, переданной методу html()
: function(i, h)
:
Метод html()
существу выполняет итерацию по коллекции, возвращаемой селектором (в этом случае по всем выбранным абзацам); без использования анонимной функции каждый элемент p
имел бы тот же набор HTML. Используя эту функцию, с i
и v
(которая может быть названа, однако, пожалуйста, вы можете получить доступ к индексу (i
) текущего итератируемого элемента среди коллекции, а v
(второй параметр) возвращает текущее значение 'value' (в этом случае существующий innerHTML
текущего узла повторяется).
Как уже отмечалось, эти параметры можно назвать любыми, что вам нравится, для меня i
и h
являются привычными (i
для "index" и h
для HTML
в этом случае); если вы помните, что (как и многие другие анонимные функции, переданные методам jQuery), первым является индекс, а второй - текущим значением.
Рекомендации:
Это выберет первый узел внутри P (который является текстовым узлом) и будет стилизовать его:
$("p").contents().first().wrap("<span style='color:green'></span>");
Демо: http://jsfiddle.net/jrAWn/
ОБНОВЛЕНО. Хорошо, и это использует класс:
.rStyle {
color:green;
}
$("p").contents().first().wrap("<span/>").parent().addClass("rStyle");
contents()
существует - кажется великолепным
Попробуйте обменивать имена тегов в кавычках (jsFiddle):
$("p").html($("p").html().replace("(rcvd)","<span style='color:green;'>(rcvd)</span>"));
На данный момент вы передаете переменную p
функции jQuery. Предположительно p
не определено, поэтому вы либо получаете ошибку Javascript, либо просто пустой объект jQuery.
Как говорили другие, стандартный способ сделать это - обернуть rvcd в промежутке:
<p>
<span class="style-this">(rcvd)</span>
<a href="linkhere">Title</a>
by Person,
<br></br>
- More text
</p>
А также
$(".style-this").css("color", "green");
Используйте css()
и дайте тегу <p>
класс:
<p id="myGreenClass">(rcvd)</p>
И этот код jQuery:
$('.myGreenClass').css('color', 'green');