Проверка стиля Jquery и поиск элемента - PullRequest
0 голосов
/ 09 июля 2010

В моем скрипте я ищу DIV, который имеет класс .se и имеет атрибут style display: block, и мне нужны DIV s ID.

Мой метод неверен: (

var usedse = $(".se"):has(css('display', 'block')).attr("id");

Не могли бы вы помочь мне исправить это?

Ответы [ 5 ]

2 голосов
/ 09 июля 2010

Вы можете написать много собственной логики, используя .filter() ... Это найдет все <div class='se'> и проверит, что их свойство CSS display установлено на block, возвращая id первого сопоставленного элемента.

var usedse = $("div.se").filter(function() { 
   return $(this).css('display') == 'block';
}).attr("id");
1 голос
/ 09 июля 2010

У вас есть несколько вариантов.

Единственное, что вы можете сделать, это attribute selector, который будет возвращать все элементы с установленным свойством класса se и display css:

$(".se [style*='display']").attr('id');

Или вы можете использовать метод .css() и проверить значение определенного свойства CSS:

var $possibles = $(".se"), id;
for ($el in $possibles)
    if ($el.css('display') === 'block') id = $el.attr('id');

Могу я спросить, почему вы это делаете? Я чувствую, что должен быть лучший способ взглянуть на проблему ... может быть, вам следует просто поместить класс в этот элемент (очевидно, это может быть невозможно в зависимости от конкретной проблемы)?

1 голос
/ 09 июля 2010

Я бы порекомендовал это:

var usedse = $('.se:visible').attr('id');
    if(usedse) alert(usedse);
1 голос
/ 09 июля 2010

Это, вероятно, лучший способ для достижения этой цели:)

id = $(".se[style*='display:block']").attr("id");

Но вам следует подумать о множественных значениях здесь, поскольку использование классов в качестве селекторов обычно означает наличие нескольких элементов div, которые вы пытаетесь использоватьчтобы получить, если это так, попробуйте этот способ вместо

$(".se[style*='display:block']").each(function(){
    //Here you can do what you want to each element
    // use `this` as a selector, for example
    id = this.attr('id');
});

Просто примечание: вы должны убедиться, что ваши селекторы выбирают правильный элемент, когда дело доходит до css, например

style = $('element').attr('style'); будет возвращать значение только из фактического элемента, такого как <div style="display:block".

Чтобы получить значения стиля из элемента, который был установлен в css, вам придется использовать селектор дляотфильтруйте их.

http://jsfiddle.net/4jVC8/

Вы должны иметь в виду, что они являются отдельными!

Так вот еще одна версия фильтра.

$('div.se').filter(function() {
    return ( $(this).css('display') == 'block');
});
1 голос
/ 09 июля 2010

Синтаксис, который вы используете, неверен, попробуйте этот простой способ:

if ($("div.se").css('display') == 'block') {
   var usedse = $(".se").attr('id');
   alert(usedse);
}
...