Добавить класс в <i>, если <span> содержит текст

Попытка добавить класс «галочка» к i с идентификатором «партнер»

$(document).ready(function () {
  jQuery('span:contains("true")').addClass('checkmark');
});

Этот код работает нормально, но добавляет класс прямо туда, где он проверяет. Как я могу добавить этот класс к совершенно другому элементу i?

Что ж, вы можете, но мы понятия не имеем, так как вы не предоставили html.

epascarello 18.05.2018 16:21

Возможный дубликат JQuery: проверка, содержит ли div текст, затем действие

Roomy 18.05.2018 16:25

@Roomy Спасибо за ссылку. Решил это, используя некоторый код оттуда.

Jan Henning 18.05.2018 17:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
519
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте родительский селектор jQuery:

$(document).ready(function () {
  jQuery('span:contains("true")').parent().addClass('checkmark');
});

Или, что еще безопаснее, вы можете использовать .closest:

$(document).ready(function () {
  jQuery('span:contains("true")').closest('i.someClass').addClass('checkmark');
});

У меня несколько элементов i, это ограничит меня ближайшим? i, к которому я бы хотел добавить, прошёл мимо нескольких других i. Любой способ добавить его к i, у которого уже есть определенный класс / идентификатор?

Jan Henning 18.05.2018 16:47

.closest принимает селектор и затем перемещается по дереву DOM вверх, пока не найдет соответствующий элемент: api.jquery.com/closest Так что да, вы можете добавить к нему определенный класс или идентификатор. Я отредактировал его, чтобы вы могли видеть, куда нужно добавить класс.

Danmoreng 18.05.2018 17:19

Сложно понять ваш вопрос, но если я правильно понял

"add class checkmark to i that has id partnered. How can I append this class to a completely different i element?"

тогда это довольно просто

$(document).ready(function () {
  $('i[id^ = "<desired id name>"]').addClass('checkmark');
});

Примечание: кажется довольно непрактичным иметь это в качестве идентификатора вместо класса с точки зрения html / css.

Извините, английский не мой родной язык. Я получаю либо истину / ложь в span. Я хотел бы проверить, включает ли этот span текст «true», и если да, добавить класс к другому элементу i. Надеюсь, это имеет смысл.

Jan Henning 18.05.2018 16:40

Вот ваш ответ на простом JavaScript:

// Get the element with ID 'partnered'
// Get a <span> element (create one if there's none)
var partnered = Document.prototype.getElementById.call(document, 'partnered'),
    span = (
        Document.prototype.querySelector.call(document, 'span') ||
        Document.prototype.createElement.call(document, 'span')
    );

// Custom function
function addClass() {
    var args = [... arguments].slice(1),
        $args = args.length,
        element = arguments[0];

    // Loop through arguments to update them
    for (var i = 0; i < $args; i += 1)
        args[i] = String(args[i]);

    // Loop through arguments after updating all of them
    for (var i = 0; i < $args; i += 1) {
        // Cache the index
        var className = args[i];

        // Append new class name
        element.setAttribute(
            'class',

            // Get the current class
            ((element.getAttribute('class') || '')

            // Remove existing duplicates of the class to add
            .replace(RegExp('\\b' + className + '\\b', '')

            // Keep the class attribute tidy
            // and add the class
            .trim() + ' ' + className).trim()
        )
    }
}

/* Synchronously
        A while loop could work too if you're certain enough.
*/
if (span.textContent || span.innerText)
    addClass(partnered, 'checkmarked');

/* Asynchronously */
(function check() {
    if (span.textContent || span.innerText)
        addClass(partnered, 'checkmarked');

    else
        typeof requestAnimationFrame == 'function' ?
            requestAnimationFrame(check) :
            setTimeout(check)
})
Ответ принят как подходящий

Решено с помощью

if ($('span#ispartner:contains("true")').length > 0) {
  $("#partnered").addClass("checkmark");
}

Спасибо за помощь!

Другие вопросы по теме