0

我有一个包含大约 100<li> </li>组数据的大型 javascript 变量。如果例如在其中找到一些单词,我想过滤这些集合(如果从数组中找到一个单词,则删除该集合)。这些单词我将它们设置在数组中(items=["mango","apple","pen"];)

谁能告诉我如何做到这一点?

<li></li>集合示例:

<li>
        <img src="./mango.jpg" width="180" height="148"
             alt="mango season" class="png">
        <a href="/mango/"  class="corners">&nbsp;</a>


            <div class="thumbnail_label">ok</div>


      <div class="details">
        <div class="title">
          <a  href=
          "/mango/"> mango</a>
          <span class="season">2</span>
        </div>
        <ul class="subject">
          <li>read</li>
        </ul>
        <ul class="sub-info">
          <li class="location">Europe</li>
          <li class="price">2</li>
        </ul>
      </div>
    </li>
4

2 回答 2

0

假设您想要的值(“mango”,“apple”,“pen”)是“div”元素内的“a”元素的文本子元素,类“title”在“div”元素内,类“详细信息”,并假设您可以使用 jQuery:

function itemsFromHtmlFragment(htmlFragment) {
  var selector = 'div[class=details] div[class=title] a'; 
  return $(selector, htmlFragment).map(function(idx, el) {
    return $(el).text().trim();
  });
}

var bigVariable = '<li> <img ... ';
itemsFromHtmlFragment(bigVariable); // => ["mango"]
于 2013-07-24T21:43:25.740 回答
0

我将列出我将用于执行此操作的方法/功能 - 不会详细介绍确切的代码,因为我觉得这是一个通用示例。

  1. 将字符串更改为一组 DOM 元素,以便您可以在它们上使用 DOM 函数 - 可能<div id="dom_set" display="none">为您的大字符串创建一个并执行一个 innerHTML
  2. 创建列表项的数组:var elementArray = document.getElementById('dom_set').querySelector(li);,所以 elementArray[0] 是第一个 li 等。
  3. 遍历数组:var testString = elementArray[0].outerHTML;- 请注意,outerHTML 不是 100% 跨浏览器兼容的,因此您需要对其进行原型制作(Google 如何制作 outerHTML 原型)
  4. 在此迭代中,遍历要检查的单词数组并检查它们。所以if(testString.indexOf(badWordArray[j] > -1))请注意 indexOf 在 IE8 中不起作用,因此您也需要对其进行原型设计。
  5. 在你的'if'语句中,如果坏词在那里,那么你可以删除节点
  6. 循环遍历所有节点后,您可以通过以下方式转换回字符串var cleanString = document.getElementById('dom_set').innerHTML;

显然有很多实际代码需要您填写,但这可能是一种更简洁的方法,与尝试进行大量复杂的字符串操作相比,它不太可能搞砸。

于 2013-07-24T20:32:31.597 回答