The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

HTML::Xit - XML/HTML DOM Manipulation with CSS Selectors

SYNOPSIS

my $X = HTML::Xit->new("http://mysite.com/mydoc.html");

$X->("a")->each( sub { my($X) = @_;

    print $X->attr("href");
    print $X->text;
} );

$X->(".a")->addClass("b c d")->removeClass("c e")->toggleClass("b a");

print $X->("<a>")->attr("href", "http://mysite.com")->text("My Site")->html;

DESCRIPTION

DOM manipulation in the style of jQuery using XML::LibXML and HTML::Selector::XPath.

METHODS

new

Create a new HTML::Xit instance. The source can be a URL (which will be fetched), a filename, a file handle, or a string.

    HTML::Xit->new("http://www.some.com");
    HTML::Xit->new("somefile.html");
    HTML::Xit->new($html);

The source will be parsed using XML::LibXML. By default the following args are used:

    recover  => 1,
    suppress_errors => 1,
    suppress_warnings => 1,

You can pass arguments for use when instantiating XML::LibXML.

    HTML::Xit->new({
        recover => 0,
        location => "http://www.some.com",
    });

These arguments will be passed to XML::LibXML->load_html which is documented in XML::LibXML::Parser.

addClass
    $X->addClass("a b");

Add one or more classes to the matching elements. Class names must be space separated.

append
    $X->append("<span>Hello</span>");
    $X->append( $X->("<span>")->text("Hello") );

Insert the content passed after the last child node for each matching element.

attr
    $X->attr("href");
    $X->attr("href", "http://www.some.com");

Either get or set an attribute.

children
    $X->children();

Get child nodes for each matching element.

classes
    my $hash_ref = $X->classes();
    $hash_ref->{someClass} ? 1 : 0;

Get hashref containing the names of all of the classes for the matching element.

!! NOT STANDARD JQUERY !!

each
    $X->each(sub {
        my($X) = @_;
    });

Interate over each matching element, calling the callback function for each.

find
    $X->(".foo")->find(".bar");

Search matching elements for additional elements that match the given selector.

first
    my $h1 = $X->("h1")->first;

Get the first matching element.

get
    my $nodes = $X->("p")->get

Get the list of XML nodes that are currently selected.

hasClass
    $X->addClass("a");
    $X->hasClass("a"); # true

Will return true if the selected element has the given class. If multiple elements are selected this will return true if any of the selected elements has the class.

html
    $X->html("<span>Hello</span>");
    $X->append( $X->("<span>")->text("Hello") );
    $X->html(); # "<span>Hello</span>"

If an HTML string or HTML objects are passed this will set the inner HTML for each selected element.

If no HTML is passed this will return the inner HTML of the first selected element as a string.

last
    $X->("a")->last();

Return the last selected element.

prepend
    $X->prepend("<span>Hello</span>");
    $X->prepend( $X->("<span>")->text("Hello") );

Insert the content passed before the first child node for each matching element.

removeClass
    $X->removeClass("a b");

Remove one or more classes from the matching elements. Class names must be space separated.

text
    $X->text("Hello");
    $X->text(); # Hello

If a string is passed this will be set as the text content for all selected elements.

If no text is passed then the text content of the first selected element will be returned.

trimText
    $X->trimText();

Return $X->text() with leading and trailing whitespace removed.

!! NOT STANDARD JQUERY !!

toggleClass
    $X->toggleClass("a b");

Toggle one or more classes from the matching elements. If the class exists it will be removed. If the class does not exist it will be added. Class names must be space separated.

SEE ALSO

XML::LibXML, HTML::Selector::XPath

AUTHOR

Ersun Warncke, <ersun.warncke at outlook.com>

http://ersun.warnckes.com

COPYRIGHT

Copyright (C) 2014 Ersun Warncke

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.