JQuery: выбрать все элементы р с некоторым набором атрибутов - PullRequest
3 голосов
/ 17 ноября 2010

Мне нужен селектор jquery, чтобы получить все элементы p, для которых установлен какой-либо атрибут, независимо от значения и имени атрибута.

Выражение, связанное с XPath:

"//p[@*]"

Ответы [ 4 ]

7 голосов
/ 17 ноября 2010

Если вы говорите, что хотите, чтобы <p> элементов имели хотя бы один встроенный атрибут, вы можете сделать это:

Пример: http://jsfiddle.net/ZRPv4/

var pWithAttrs = $('p').filter(function() {
    return this.attributes.length;
});

Это даст вам набор <p> элементов, у которых есть хотя бы один встроенный атрибут.

Он проверяет свойство length массива attributes, связанного с текущим <p> в итерации.Если length равно 0, оно будет удалено из результата.


Вот пользовательская версия селектора:

Пример: http://jsfiddle.net/ZRPv4/1/

$.extend($.expr[':'], {
   'hasAnAttr': function(elem, i, attr){      
     return elem.attributes.length;
   }
});

var pWithAttrs = $('p:hasAnAttr');
0 голосов
/ 17 ноября 2010
$("p").each(function(){
   if(this.attributes.size>0){

   }
});

Я не знаю, существует ли чистое решение jquery.

0 голосов
/ 17 ноября 2010

Я не думаю, что вы можете сделать это с помощью выражений, но вы можете перебирать элементы p и проверять наличие атрибутов:

$('p').each(function(){
if(this.attributes.length > 0)
{
...do code...
}
});
0 голосов
/ 17 ноября 2010

Вы должны построить строку селектора следующим образом:

Если у вас есть массив имен и значений атрибутов attrs:

var selector = 'p';
for (var attrName in attrs) {
        selector = selector + '[' + attrName + '=' + attrs[attrName] + ']';
    }
}

Это создаст строку селектора в форме:

p[attrName0=attrValue0][attrName1=attrName1] ...

, а затем используйте этот селектор в операторе jQuery:

$(selector).remove();
...