如何使用javascript删除包含特定值的大字符串中的模式?

时间:2013-07-24 14:48:10

标签: javascript

我有一个大的javascript变量,它包含大约100 <li> </li>组数据。我想过滤这些集合,例如,如果在它们中找到一些单词(如果在数组中找到一个单词,则删除该集合)。这些单词我将它们设置在数组中(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>

2 个答案:

答案 0 :(得分: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;
  7. 转换回字符串

    显然有很多实际的代码可供您填写,但这可能是一种更简洁的方法,而不是试图进行大量精心设计的字符串操作。

答案 1 :(得分:0)

假设您想要的值(“mango”,“apple”,“pen”)是“div”元素中“a”元素的文本子元素,其中“div”类中包含“title”类具有类“详细信息”的元素,并假设您可以使用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"]