2016-05-14 1 views
0

Можно ли использовать селектор Javascript, чтобы найти узлы, которые содержат потомок с определенным атрибутомJavaScript Selector: найти узлы, которые содержат потомок с определенным атрибутом

Например, я хочу, чтобы удалить все не-на-продажу товаров от тока страница:

var notPriceSales = document.querySelectorAll 
    ("body div.contentArea>div.right ul>li span:not(.priceSale)") 

найдет цены этикетку с не-на-продажи продукции, но я хочу, чтобы найти Ли, который имеет потомка: продолжительность: нет (.priceSale)

так, то я могу удалить все не продаваемые товары:

Array.prototype.forEach.call(notpriceSales, function(node) { 
    node.parentNode.removeChild(node); 
}); 

Как использовать селектор для выбора узлов, у которых потоки потомков имеют какое-то особое свойство?

Благодаря

+0

У вас есть вопрос с меткой 'jquery'. , , вы в порядке с решениями jQuery? – talemyn

+0

Конечно, либо jquery, либо pure js будут работать для меня. спасибо, @talemyn –

+0

Пожалуйста, покажите свой HTML или простой сжатый HTML, который позволяет воспроизводить ваши требования и показывать, какие элементы (ы) должны быть сопоставлены, а какие нет. Таким образом, мы можем дать практический ответ, а не теоретическое объяснение возможного ответа; который будет более полезен для вас и тех, которые приходят позже в поисках ответа. Пожалуйста, найдите время, чтобы прочитать рекомендации «[ask]» и «[mcve]», они могут помочь объяснить, почему предоставление кода полезно и - во многих случаях, если не все - ожидалось и требовалось. –

ответ

1

Хотя, безусловно, выполнимо в ванили JS, это на самом деле очень проста в JQuery.

Во-первых, поскольку я не вижу вашу структуру HTML, и я могу только получить обоснованное предположение от селектора в вашем вопросе, я просто предполагаю, что существует некоторый родительский элемент, который является общим для всех эти li теги. Чтобы убедиться, что ваш единственный выбор этих продуктов охватывает (то есть, а не только любой диапазон на странице, который не имеет класса «.priceSale»), вы можете использовать его в качестве базового контекста для вашего селектора jQuery. Я дам вам понять, что вы хотите, и просто укажете его как $parentContainer в моем коде ниже.

После того, как вы есть, что базовый контекст, это действительно просто процесс две части, чтобы получить li элементы, которые вы хотите:

$parentContainer.find("span").not(".priceSale").closest("li"); 

Первая часть будет собрать все «внереализационных» охватывает в контейнер, а затем вторая часть будет собирать ближайший элемент предка li для каждого пролета в исходной группе и поставить их в группу.

В этот момент просто возьмите полученную группу из li элементов и .remove() их, display: none; их. , , что бы вы ни делали, чтобы подавить их от показа.

 Смежные вопросы

  • Нет связанных вопросов^_^