JQuery селектор, чтобы игнорировать элемент?

0

Я извлекаю содержимое страницы статьи.

Один селектор, "entry": $('div.content__article-body').html().trim() получает основное тело статьи. Это в основном состоит из текстовых абзацев с их тегами <p> и заголовка, что я и хочу. Однако он также получает элемент, который я не хочу, который является <aside>. Как я могу гарантировать, что <aside> НЕ включен в результирующий текст?

Здесь я читал темы о "нет". Я пробовал такие вещи, как...

$('div.content__article-body').not('aside').html().trim()

$('div.content__article-body').html().not('aside').trim()

$('div.content__article-body:not(aside)').html().trim() или $('div.content__article-body:not('aside')').html().trim() - не уверен.

Но никто из них не работает. Я неправильно определяю, как использовать "не"?

Обновление: Выдержка ниже (в aside в основном, это бокс в статье)...

</figcaption>
</figure>
</header>
<div class="content__article-body from-content-api js-article__body" itemprop="articleBody" data-test-id="article-review-body">
<p>A wise man once <a href="http://www.quora.com/Who-originally-suggested-that-if-youre-not-paying-for-the-product-you-are-the-product" rel="nofollow" data-link-name="in body link" class="u-underline">said</a>: "If youre not paying for it, youre the product." Thats what is happening in the magazine world, as <a href="https://www.theguardian.com/media/2015/jul/06/nme-to-go-free-with-larger-circulation" data-link-name="in body link" class="u-underline">NME abandons its cover price</a> after 63 years, to go free.<br></p>
<p>In doing so, the title is turning its readers from customers in to advertiser targets. But NME is far from the first property to try this trick. <a href="http://articles.baltimoresun.com/1996-11-13/features/1996318156_1_village-voice-schneiderman-circulation" rel="nofollow" data-link-name="in body link" class="u-underline">The Village Voice</a>, the <a href="http://www.britishpapers.co.uk/england-wmids/shrewsbury-chronicle/" rel="nofollow" data-link-name="in body link" class="u-underline">Shrewsbury Chronicle</a>, the <a href="https://news.google.com/newspapers?id=HU1aAAAAIBAJ&amp;sjid=KSgMAAAAIBAJ&amp;pg=1120%2C535142" rel="nofollow" data-link-name="in body link" class="u-underline">Standard</a> of Hong Kong, <a href="https://gigaom.com/2007/10/31/419-friends-reunited-dropping-subscriptions-to-go-free-ad-supported-report/" rel="nofollow" data-link-name="in body link" class="u-underline">Friends Reunited</a>, the <a href="https://gigaom.com/2009/10/02/419-london-evening-standard-bold-re-birth-or-a-free-folly/" rel="nofollow" data-link-name="in body link" class="u-underline">Evening Standard</a>, the <a href="http://www.fulhamsw6.com/default.asp?section=info&amp;spage=common/contrinity001.htm" rel="nofollow" data-link-name="in body link" class="u-underline">Fulham and Hammersmith Chronicle</a>, Time Out in <a href="https://gigaom.com/2008/09/01/419-time-out-seeking-investors-could-go-free-and-beef-up-online/" rel="nofollow" data-link-name="in body link" class="u-underline">London</a> and <a href="http://www.timeout.com/about/time-out-group/latest-news/time-out-new-york-announces-launch-of-its-magazine-to-free-weekly-distribution" rel="nofollow" data-link-name="in body link" class="u-underline">New York</a>, and now <a href="https://www.theguardian.com/media/greenslade/2015/jul/08/the-sun-lowers-its-paywall-allowing-free-access-to-many-stories" data-link-name="in body link" class="u-underline">parts of the Suns website</a> are all among those to have dropped their fees in favour of frees.</p>
<p>But what has become of the converts? And what do their fortunes since tell us, <a href="https://www.theguardian.com/music/nme" data-link-name="auto-linked-tag" data-component="auto-linked-tag" class="u-underline">NME</a> and other operators about the key ingredients for a successful switch?</p>
<aside class="element element-rich-link element--thumbnail element-rich-link--not-upgraded" data-component="rich-link" data-link-name="rich-link-1 | 1">
<div class="rich-link">
<div class="rich-link__container">
<div class="rich-link__header">
<h1 class="rich-link__title">Old media prospects have improved but the new media threat looms large</h1>
</div>
<div class="rich-link__read-more">
<div class="rich-link__arrow">
<span class="inline-arrow-in-circle inline-icon ">
<svg width="24" height="24" viewbox="0 0 24 24" class="inline-arrow-in-circle__svg inline-icon__svg">
<path class="rich-link__arrow-icon" d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m.21 19l-.637-.668 4.888-6.326H4.996v-1.01h11.465l-4.888-6.333.637-.668L19 11.153v.685l-6.79 7.157" fill-rule="evenodd"/>
</svg> </span>
</div>
<div class="rich-link__read-more-text">
Read more
</div>
</div>
<a class="rich-link__link u-faux-block-link__overlay" href="https://www.theguardian.com/media-network/2015/mar/20/new-media-threat-buzzfeed-vice" aria-label="Old media prospects have improved but the new media threat looms large"></a>
</div>
</div>
</aside>
<h2>1. Know your predicament</h2>
<p>It would be nice to say the switch to free comes either out of benevolence or out of a market opportunity. The reality is, operators invariably flick the switch under external pressure of a poor business outlook – no amount of dressing up as a "bold relaunch" can change that.</p>
<p>NMEs circulation was falling by <a href="https://www.theguardian.com/media/2014/feb/13/nme-relaunch-sales-slide-ipc-media" data-link-name="in body link" class="u-underline">around a fifth annually</a>. The Evening Standard was frustrated to find itself far behind national dailies on ad planners schedules, locking it out of big brand bucks, according to someone familiar with the strategy to switch.</p>
<p>The Village Voice dropped its cover charge in 1996 after being eaten into by rival New York Press being given away in green sidewalk boxes, while Hong Kongs Standard newspaper was forced to act when the government removed a decree that listed companies must buy classified ads in newspapers. But the key – as anyone who has heard the "<a href="https://en.wikipedia.org/wiki/Boiling_frog" rel="nofollow" data-link-name="in body link" class="u-underline">boiling frog</a>" allegory will know – is to recognise when it is your time to change tack.</p>
Теги:
jquery-selectors

4 ответа

2
Лучший ответ

С .not() метод, как это сделать, расширить селектор div.content__article-body > * поэтому нацелены на div братьев, а затем цикл по результату.

Использование дочернего селектора > позволяет исключить любые элементы в aside хотя это также повлияет и на другие элементы, и чтобы вернуть своих детей в выходной файл, используйте .outerHTML.

Фрагмент стека

$('div.content__article-body > *').not('aside').each( function( index, value ) {
  console.log( value.outerHTML );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="content__article-body">

    <p>some paragraph <span>some span</span></p>

    <div>some div</div>

    <aside>an aside <div>some div in aside</div></aside>

</div>

И с помощью :not() селектора.

Фрагмент стека

$('div.content__article-body > *:not(aside)').each( function( index, value ) {
  console.log( value.outerHTML );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="content__article-body">

  <p>some paragraph <span>some span</span></p>

  <div>some div</div>

  <aside>an aside <div>some div in aside</div></aside>

</div>
  • 0
    Спасибо за отзывы. Я изо всех сил пытаюсь реализовать ответы, вероятно, из-за моего собственного уровня владения Javascript. Моя установка работает следующим образом: result = { "entry": $("jquery_selector_here") }; (несколько существует в result 'Я не уверен, как согласовать это с последующей value.outerHTML .
  • 0
    @RobertAndrews Не могли бы вы вручную создать этот объект, используя мой демонстрационный код выше, чтобы я лучше понял конечный результат. Используйте, например, jsfiddle.net
Показать ещё 7 комментариев
1

Вы можете попробовать что-то вроде этого:

var e = $('.box').html();
console.log(e);

var subStr = e.match("<aside>(.*?)</aside>");
var r = e.replace(subStr[0], "");

console.log(r);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  Some text here
  <p>More text here</p>
  <aside>this is an <span>aside</span></aside>
</div>

Или вы создаете другой элемент, тогда вы удаляете сторонний узел:

var e = $('.box').html();
var newE = $('<div>'+e+'</div>');
newE.find('aside').remove();
console.log(newE.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  Some text here
  <p>More text here</p>
  <aside>this is an <span>aside</span></aside>
</div>
  • 0
    Использование регулярных выражений для разбора HTML - БОЛЬШОЕ нет-нет :) ... и есть правильный способ использования запрашиваемого метода / селектора, который я разместил
  • 0
    @LGSon Я тоже добавил еще одну;) кстати, ваше решение не будет собирать весь контент в Variable ... Я думаю, он ищет способ извлечь весь контент за исключением стороннего контента ... в вашем случае вы можете получить также содержимое в стороне. Так что лучше используйте > Я думаю,
Показать ещё 3 комментария
-1

Попробуй это.

$ ("div.content_article-body *: not (в сторону)");

  • 0
    Я отредактировал свой ответ
-2

Прости; Я не понял этот вопрос.

мой ответ был ответом на этот вопрос: "Селектор JQuery игнорировать элемент?".

пожалуйста, проверьте это:

$('div.content__article-body').html().replace(/<aside ?.+?>[.\S\s]+?<\/aside>/ig, "");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню