Я уверен, что другие спросили об этом, но я просто не могу найти что-нибудь, что мне помогает.
Посмотрите на этот код на jsfiddle.
И Person1, и Person2 имеют
class="from"
И селектор CSS имеет. От того, что он применяется к обоим, но я пытаюсь добиться того, что он применим только к Person1 с JavaScript/jQuery.
Я пробовал множество вещей, таких как
$( "span.from:contains('Person1')" )
без успеха. Как мне это сделать?
Помощь была бы очень признательна :)
$( "span.from:contains('Person1')")
работает отлично. Но в css вы все равно затрагиваете все элементы с классом .from
. После того, как вы получите элемент с Javascript, вы должны с ним что-то сделать, например, добавить новый класс и изменить css, чтобы анимация запускалась только в новом классе.
$( "span.from:contains('Person1')").addClass('newClass')
CSS:
.newClass{
-webkit-animation: color-change 1s infinite;
...
}
$("span.from:contains('Person1')")
- это оригинальное решение OP, которое, по его словам, не работает, но работает. То, что он делает после того, как получает элемент, является тем, что имеет значение.
В вашем случае вы можете использовать filter()
$("span.from").filter(function(){ return this.innerHTML == "Person1"; })
для удаления анимации элемента удалите класс из класса с помощью removeClass()
$("span.from").filter(function(){
return this.innerHTML == "Person1";
}).removeClass('from');
Если вы используете прямой CSS, вы должны выбрать только первый элемент, используя селектор nth-child:
.from:nth-of-type(1) { /* styles here */ }
Если вы хотите выбрать первый элемент через JS, вам просто нужно будет использовать eq(), чтобы захватить первый элемент по индексу. Это можно связать с цепочкой, поэтому вы можете продолжить установку CSS на этом элементе, подобном этому (поэтому в этом примере я добавляю дополнительный класс на первом.from, а также устанавливаю его цвет фона):
$(".from").eq(0).addClass("first-item").css("backgroundColor", "orange");
Вы можете попробовать с .not()
$(".from:not(span:contains('Person2')):eq(0)")
$('.from:eq(0)')