2017-02-04 6 views
-1

У меня есть блок HTML, из которого мне нужно извлечь текст:Как выбрать все дети, за исключением х из HTML-узла

<div class="comment"> 
    <span class="c00"> 
    TEXT 
    <p>text</p> 
    <p>text</p> 
    <div class="reply">reply</div> 
    </span> 
</div> 

Обратите внимание, что «TEXT» является текстовым узлом, без HTML-тегов в пределах span class="c00" ,

Как выбрать все тексты безdiv class="reply"?

Я попробовал :not оператор:

.c00:not(.reply) 

, но это не сработало.

+1

Я укажу, что включение элементов уровня блока ('p' и' div') внутри 'span' [обычно недоверчиво.] (Https://www.w3.org/TR/html401 /struct/global.html#h-7.5.3). Вы должны подумать, можете ли вы/должны изменить разметку, что даст вам возможность обернуть этот один текстовый узел изгоев тегом, чтобы сделать его проще. – Dre

+0

Это то, что я уже собрал. Я работаю над этим как часть упражнения по очистке веб-сайта, код выше - с сайта, с которого мы соскабливаем. – artze

+2

@Dre: «обычно нахмурился». Это очень мягко. – BoltClock

ответ

0

Похоже, вы не можете. Просто установите стили для .c00 и переписать его в .reply:

.c00 { 
 
    color: #F00; 
 
    font-weight: 700; 
 
    font-style: italic; 
 
} 
 
.reply { 
 
    color: #000; 
 
    font-weight: 400; 
 
    font-style: normal; 
 
}
<div class="comment"> 
 
    <span class="c00"> 
 
    TEXT 
 
    <p>text</p> 
 
    <p>text</p> 
 
    <div class="reply">reply</div> 
 
    </span> 
 
</div>

0

Вот что я хотел бы использовать:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<div class="comment"> 
    <span class="c00"> 
    TEXT 
    <p>text</p> 
    <p>text</p> 
    <div class="reply">reply</div> 
    </span> 
</div> 
EOT 

span = doc.at('span.c00') 
text_nodes = [ span.children.first.text.strip ] 
text_nodes += span.search('p').map(&:text) 
text_nodes # => ["TEXT", "text", "text"] 

Иногда не отчетливая или легкий путь, но, разбив проблему на простые шаги, она, как правило, встанет на свои места.

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

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