Вопрос прост; используя функцию jQuery css
, может быть возвращен вычисленный стиль атрибута CSS, но что, если для этого атрибута есть более одного стиля? Например:
<div id="foo" style="text-decoration:underline;">Some underline text</div>
Команда $('#foo').css('text-decoration');
вернет underline
. Теперь, если я изменю его на
<div id="foo" style="text-decoration:underline;">Some underline <span id="bar" style="text-decoration:line-through;">text</span></div>
Команда $('#bar').css('text-decoration');
вернет line-through
, ладно.
Но фактический текст также underline
! Как я могу вернуть оба? Нужно ли искать всех предков, если я хочу знать, есть ли какой-либо текст как underline
и line-through
? Звучит немного больно, нет?
** Изменить **
Другая проблема возникает при использовании этого HTML
<span style="text-decoration:underline;">some <span id="e1" style="font-weight:bold;">text</span></span>
где $('#e1').css('text-decoration');
по какой-то причине возвращает none
, а текст явно отображается с подчеркиванием.
** Отказ от ответственности **
Этот вопрос не должен обсуждать, как UA отображает элемент, но если иерархия элементов применяет CSS или нет. Если лучше понять text-decoration
лучше, я предлагаю прочитать об этом. Вопрос старается сосредоточиться на более обобщенном вопросе. Например, он также может применяться к этому HTML
<div style="display:none;">Some <span id="keyword" style="text-decoration:underline;">hidden</span> text</div>
где можно было бы узнать, является ли элемент keyword
видимым или нет. С помощью приведенного ниже кода это делается просто с помощью
cssLookup($('#keyword'), 'display', 'none'); // -> true
** ОБНОВЛЕНИЕ **
После всех ответов и комментариев, здесь, на основе Brock Adams:
/**
* Lookup the given node and node parents for the given style value. Returns boolean
*
* @param e element (jQuery object)
* @param style the style name
* @param value the value to look for
* @return boolean
*/
function cssLookup(e, style, value) {
var result = (e.css(style) == value);
if (!result) {
e.parents().each(function() {
if ($(this).css(style) == value) {
result = true;
return false;
}
});
}
return result;
}
Спасибо, всем, за ваши материалы.