2015-10-14 6 views
3

Мне нужно применить jquery к коду, который генерируется CMS. Я просто хочу добавить класс в теги span, которым присвоен определенный font-family.Целевые конкретные элементы с типом семейства шрифтов

Проблема у меня есть выступление. Этот код пропускает все теги span внутри сгенерированного кода, который может быть сотнями. Есть ли способ таргетинга только пролеты, которые имеют font-family из 'Open Sans'

DEMO https://jsfiddle.net/w5fjqjvL/

// Works perfectly. Simple each loop iterating through ALL spans

$.each($('span'), function() { 
    if ($(this).css('font-family').indexOf("Open Sans") >= 0){ 
     $(this).addClass('openSans'); 
    } 
}); 
+1

'Я имею применить JQuery к коду, который генерируется с помощью CMS в sorts' Так вместо того, чтобы задать вопрос относительно того, почему ты необходимо добавить код к этим конкретным элементам, возможно, лучше обходным путем. И действительно ли 'font-family' добавлен с использованием встроенного атрибута стиля? –

+0

Мой вопрос был значительно упрощен. Без написания биографии мой вопрос отвечает моим требованиям. Да, встроенный стиль применяется CMS. Это обычная практика при использовании таких инструментов, как CKEditor и т. Д. – Peter

+0

Если ваша CMS использует определенный метод для добавления встроенного стиля, тогда вы можете переопределить этот метод, это то, что я имел в виду в отношении проблемы XY, например. Но имхо, на ваш вопрос отсутствует конкретный образец с большим контекстом, чтобы сделать его более ясным. Теперь, если лучшим решением является добавление клиентской части класса, а производительность - проблема для вас, тогда не используйте jQuery, вместо этого используйте «простые» соответствующие js-методы. И просто любопытно, но зачем вам ориентироваться на конкретные интервалы в отношении их «семейства шрифтов»? –

ответ

0

Вы можете использовать функцию фильтра, чтобы получить все элементы с требуемым условием. а затем добавить класс к ним все вместе. в отличие от добавления элементов по отдельности в каждом условии.

Но внутренне .filter() выполняет ту же работу. итерация по элементам и возврат фильтрованного элемента на основе условия. единственный способ, которым он будет эффективен, - это часть, когда он добавляет класс.

$('span').filter(function(){ 
    return $(this).css('font-family').indexOf("Open Sans") >= 0; 
}).addClass('openSans'); 
+0

Это не будет действительно оптимизировано по сравнению с кодом OP –

+0

@ A.Wolff: Я уже указал эту часть. будет эффективен только для логики добавления класса. –

+1

В этом случае было бы лучше просто использовать функциональный параметр метода 'addClass()', чтобы сделать часть фильтрации –

0

нужно использовать JQuery фильтр

Проверка документации here

var $addFonts = $('span').filter(function(e) { 
    return $(this).css('font-family').indexOf("Open Sans") >= 0); 
}); 

$addFonts.addClass('openSans'); 
Смежные вопросы