@@ -114,6 +114,7 @@ cdef class LexborNode:
114114 lxb_str = lexbor_str_create()
115115 if self ._is_fragment_root:
116116 status = serialize_fragment(self .node, lxb_str)
117+ # status = lxb_html_serialize_tree_str(self.node, lxb_str)
117118 else :
118119 status = lxb_html_serialize_tree_str(self .node, lxb_str)
119120 if status == 0 and lxb_str.data:
@@ -202,6 +203,14 @@ cdef class LexborNode:
202203 )
203204 return container.text
204205
206+ cdef inline LexborNode _get_node(self ):
207+ cdef LexborNode node
208+ if self ._is_fragment_root:
209+ node = self .parent
210+ else :
211+ node = self
212+ return node
213+
205214 def css (self , str query ):
206215 """ Evaluate CSS selector against current node and its child nodes.
207216
@@ -223,7 +232,7 @@ cdef class LexborNode:
223232 -------
224233 selector : list of `Node` objects
225234 """
226- return self .parser.selector.find(query, self )
235+ return self .parser.selector.find(query, self ._get_node() )
227236
228237 def css_first (self , str query , default = None , bool strict = False ):
229238 """ Same as `css` but returns only the first match.
@@ -245,9 +254,9 @@ cdef class LexborNode:
245254 selector : `LexborNode` object
246255 """
247256 if strict:
248- results = self .parser.selector.find(query, self )
257+ results = self .parser.selector.find(query, self ._get_node() )
249258 else :
250- results = self .parser.selector.find_first(query, self )
259+ results = self .parser.selector.find_first(query, self ._get_node() )
251260 n_results = len (results)
252261 if n_results > 0 :
253262 if strict and n_results > 1 :
@@ -664,7 +673,7 @@ cdef class LexborNode:
664673 if isinstance (value, (str , bytes, unicode )):
665674 bytes_val = to_bytes(value)
666675 new_node = < lxb_dom_node_t * > lxb_dom_document_create_text_node(
667- & self .parser.main_document() .dom_document,
676+ & self .parser.document .dom_document,
668677 < lxb_char_t * > bytes_val, len (bytes_val)
669678 )
670679 if new_node == NULL :
@@ -673,7 +682,7 @@ cdef class LexborNode:
673682 lxb_dom_node_remove(< lxb_dom_node_t * > self .node)
674683 elif isinstance (value, LexborNode):
675684 new_node = lxb_dom_document_import_node(
676- & self .parser.main_document() .dom_document,
685+ & self .parser.document .dom_document,
677686 < lxb_dom_node_t * > value.node,
678687 < bint> True
679688 )
@@ -717,15 +726,15 @@ cdef class LexborNode:
717726 if isinstance (value, (str , bytes, unicode )):
718727 bytes_val = to_bytes(value)
719728 new_node = < lxb_dom_node_t * > lxb_dom_document_create_text_node(
720- & self .parser.main_document() .dom_document,
729+ & self .parser.document .dom_document,
721730 < lxb_char_t * > bytes_val, len (bytes_val)
722731 )
723732 if new_node == NULL :
724733 raise SelectolaxError(" Can't create a new node" )
725734 lxb_dom_node_insert_before(self .node, new_node)
726735 elif isinstance (value, LexborNode):
727736 new_node = lxb_dom_document_import_node(
728- & self .parser.main_document() .dom_document,
737+ & self .parser.document .dom_document,
729738 < lxb_dom_node_t * > value.node,
730739 < bint> True
731740 )
@@ -768,15 +777,15 @@ cdef class LexborNode:
768777 if isinstance (value, (str , bytes, unicode )):
769778 bytes_val = to_bytes(value)
770779 new_node = < lxb_dom_node_t * > lxb_dom_document_create_text_node(
771- & self .parser.main_document() .dom_document,
780+ & self .parser.document .dom_document,
772781 < lxb_char_t * > bytes_val, len (bytes_val)
773782 )
774783 if new_node == NULL :
775784 raise SelectolaxError(" Can't create a new node" )
776785 lxb_dom_node_insert_after(self .node, new_node)
777786 elif isinstance (value, LexborNode):
778787 new_node = lxb_dom_document_import_node(
779- & self .parser.main_document() .dom_document,
788+ & self .parser.document .dom_document,
780789 < lxb_dom_node_t * > value.node,
781790 < bint> True
782791 )
@@ -819,15 +828,15 @@ cdef class LexborNode:
819828 if isinstance (value, (str , bytes, unicode )):
820829 bytes_val = to_bytes(value)
821830 new_node = < lxb_dom_node_t * > lxb_dom_document_create_text_node(
822- & self .parser.main_document() .dom_document,
831+ & self .parser.document .dom_document,
823832 < lxb_char_t * > bytes_val, len (bytes_val)
824833 )
825834 if new_node == NULL :
826835 raise SelectolaxError(" Can't create a new node" )
827836 lxb_dom_node_insert_child(self .node, new_node)
828837 elif isinstance (value, LexborNode):
829838 new_node = lxb_dom_document_import_node(
830- & self .parser.main_document() .dom_document,
839+ & self .parser.document .dom_document,
831840 < lxb_dom_node_t * > value.node,
832841 < bint> True
833842 )
@@ -930,7 +939,7 @@ cdef class LexborNode:
930939 -------
931940 selector : The `Selector` class.
932941 """
933- return LexborSelector(self , query)
942+ return LexborSelector(self ._get_node() , query)
934943
935944 def __eq__ (self , other ):
936945 if isinstance (other, str ):
0 commit comments