class Nokogiri::HTML4::DocumentFragment - nokogiri-1.15.2 Documentation

# class Nokogiri::HTML4::DocumentFragment

### Public Class Methods

new(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) { |options| ... } click to toggle source

    # File lib/nokogiri/html4/document_fragment.rb, line 27
    def initialize(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) # rubocop:disable Lint/MissingSuper
      return self unless tags

      options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
      yield options if block_given?

      if ctx
        preexisting_errors = document.errors.dup
        node_set = ctx.parse("<div>#{tags}</div>", options)
        node_set.first.children.each { |child| child.parent = self } unless node_set.empty?
        self.errors = document.errors - preexisting_errors
      else
        # This is a horrible hack, but I don't care
        path = if /^\s*?<body/i.match?(tags)
          "/html/body"
        else
          "/html/body/node()"
        end

        temp_doc = HTML4::Document.parse("<html><body>#{tags}", nil, document.encoding, options)
        temp_doc.xpath(path).each { |child| child.parent = self }
        self.errors = temp_doc.errors
      end
      children
    end

parse(tags, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block) click to toggle source

Create a `Nokogiri::XML::DocumentFragment` from `tags`, using `encoding`

    # File lib/nokogiri/html4/document_fragment.rb, line 8
    def self.parse(tags, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block)
      doc = HTML4::Document.new

      encoding ||= if tags.respond_to?(:encoding)
        encoding = tags.encoding
        if encoding == ::Encoding::ASCII_8BIT
          "UTF-8"
        else
          encoding.name
        end
      else
        "UTF-8"
      end

      doc.encoding = encoding

      new(doc, tags, nil, options, &block)
    end