From f094508cd0d46e65190995d2c7a99b3ab8959a26 Mon Sep 17 00:00:00 2001 From: Leonard Richardson Date: Tue, 23 Jun 2015 22:34:46 -0400 Subject: Made the previous fix nicer by adding arguments to setup() that let us preserve a tag's existing place in the tree. --- bs4/element.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'bs4/element.py') diff --git a/bs4/element.py b/bs4/element.py index f236216..9dc7b47 100644 --- a/bs4/element.py +++ b/bs4/element.py @@ -185,18 +185,30 @@ class PageElement(object): return self.HTML_FORMATTERS.get( name, HTMLAwareEntitySubstitution.substitute_xml) - def setup(self, parent=None, previous_element=None): + def setup(self, parent=None, previous_element=None, next_element=None, + previous_sibling=None, next_sibling=None): """Sets up the initial relations between this element and other elements.""" self.parent = parent + self.previous_element = previous_element if previous_element is not None: self.previous_element.next_element = self + self.next_element = next_element - self.previous_sibling = None - self.next_sibling = None - if self.parent is not None and self.parent.contents: - self.previous_sibling = self.parent.contents[-1] + if self.next_element: + self.next_element.previous_element = self + + self.next_sibling = next_sibling + if self.next_sibling: + self.next_sibling.previous_sibling = self + + if (not previous_sibling + and self.parent is not None and self.parent.contents): + previous_sibling = self.parent.contents[-1] + + self.previous_sibling = previous_sibling + if previous_sibling: self.previous_sibling.next_sibling = self nextSibling = _alias("next_sibling") # BS3 -- cgit v1.2.3