【问题标题】:How to remove an element from a group of elements?如何从一组元素中删除一个元素?
【发布时间】:2012-06-19 04:10:42
【问题描述】:

给定下面的代码:

HTML:

<div>a</div>
<div>b</div>
<div>c</div>

JS:

Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.get(1).remove();
// remove doesn't affect elements. why?
elements.size();   // equal 3
// but this works
doc.outerHtml() // <div>a</div><div>c</div>

我是否必须使用此代码来删除元素?好像太啰嗦了。

Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.get(1).remove();
elements = doc.select("div");

【问题讨论】:

  • 以下任何答案有帮助吗?如果是,请接受一个,所以这个话题可以被认为是关闭的。如果没有,请让社区知道,以便我们提供进一步的帮助。

标签: jsoup


【解决方案1】:

这应该可以帮助你:

public class TestJsoup {

    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://www.google.ro").get();
            Elements select = doc.select("div");
            System.out.println(select.size());
            select.remove(1);
            System.out.println(select.size());
        } catch (IOException ex) {
            Logger.getLogger(TestJsoup.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

【讨论】:

    【解决方案2】:

    你问为什么这不起作用

    elements.get(1).remove();
    // remove doesn't affect elements. why?
    

    答案可以在实现中找到。 您在元素上调用的方法是在 Node 类。

    public void remove() {
        Validate.notNull(this.parentNode);
        this.parentNode.removeChild(this);
    }
    

    如您所见,调用 remove() 从父元素中删除了此元素 (如果您打印文档,您将看到元素 b 已 删除。但这并不意味着已从列表中删除 Elements 类拥有的元素。

    public class Elements implements List<Element>, Cloneable {
        private List<Element> contents; 
    

    为了做到这一点,你必须按照@Silviu Burcea 向你展示的方式去做, 通过调用方法remove(int index),您正在调用以下方法 可以在Elements 类中找到实现

    public Element remove(int index) {
        return ((Element) this.contents.remove(index));
    }
    

    虽然心里很清楚,但如果你这样做,你唯一要做的就是 从Elements 类包含的列表中删除第 i 个元素。

    查看这些示例

    示例1:元素的大小减小了,但文档保持不变

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            String baseHtml =   "<div>a</div>" +
                                "<div>b</div>" +
                                "<div>c</div>";
    
            Document doc = Jsoup.parse(baseHtml);
            Elements elements = doc.select("div");
            elements.remove(1);
            System.out.println(doc.outerHtml());
            System.out.println("-----------------------------------");
            System.out.println(elements.size());   
            System.out.println("-----------------------------------");
            System.out.println(doc.outerHtml()); 
        }
    }
    

    示例 2:元素保持不变,但文档发生了变化

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            String baseHtml =   "<div>a</div>" +
                                "<div>b</div>" +
                                "<div>c</div>";
    
            Document doc = Jsoup.parse(baseHtml);
            Elements elements = doc.select("div");
            elements.get(1).remove();
            System.out.println(doc.outerHtml());
            System.out.println("-----------------------------------");
            System.out.println(elements.size());   
            System.out.println("-----------------------------------");
            System.out.println(doc.outerHtml()); 
        }
    }
    

    我希望这有助于消除混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2013-05-27
      • 2018-11-16
      • 2013-10-04
      • 2017-02-25
      • 1970-01-01
      相关资源
      最近更新 更多