NAME

HTML::Object::DOM::Collection - HTML Object DOM Collection

SYNOPSIS

use HTML::Object::DOM::Collection;
my $this = HTML::Object::DOM::Collection->new || die( HTML::Object::DOM::Collection->error, "\n" );

my $html = <<EOT;
<html>
    <head><title>Demo</title></head>
    <body>
        <form id="myForm">
            <input type="text" />
            <button>Ok</button>
        </form>
    </body>
</html>
EOT

my( $elem1, $elem2 );
my $p = HTML::Object::DOM->new;
my $doc = $p->parse_data( $html );
# $doc->forms is an HTML::Object::DOM::Collection

$elem1 = $doc->forms->[0];
$elem2 = $doc->forms->item(0);

say( $elem1 == $elem2 ); # returns: "1" (i.e. true)
# or, similarly
say( $elem1 eq $elem2 ); # returns: "1" (i.e. true)

$elem1 = $doc->forms->myForm;
$elem2 = $doc->forms->namedItem("myForm");

say( $elem1 == $elem2 ); # returns: "1" (i.e. true)
# or, similarly
say( $elem1 eq $elem2 ); # returns: "1" (i.e. true)

# This is possible under JavaScript, but not possible under perl
# $elem1 = $doc->forms->[ 'named.item.with.periods' ];

VERSION

v0.2.0

DESCRIPTION

The Collection interface represents a generic collection (array-like object inheriting from Module::Generic::Array) of a list of elements (in document order) and offers methods and properties for selecting from that list.

This is fundamentally different from HTML::Object::Collection, which is used by HTML::Object::XQuery

PROPERTIES

length

Returns the number of items in the collection.

METHODS

item

Provided with an integer representing an index and this returns the specific node at the given zero-based index into the list. Returns undef if the index is out of range.

This is also an alternative to accessing $collection-[$i]> (which instead returns undef when $i is out-of-bounds).

Example:

my $c = $doc->images;   # This is an HTMLCollection
my $img0 = $c->item(0); # You can use the item() method this way
my $img1 = $c->[1];     # But this notation is easier and more common

See Mozilla documentation

namedItem

Provided with a name and this returns the specific node whose ID or, as a fallback, name matches the string specified by name. Matching by name is only done as a last resort, only in HTML, and only if the referenced element supports the name attribute. Returns undef if no node exists by the given name.

An alternative to accessing $collection-[ $name ]> (which is possible in JavaScript, but not under perl).

Example:

<div id="personal">
    <span name="title">Dr.</span>
    <span name="firstname">John</span>
    <span name="lastname">Doe</span>
</div>

my $container = $doc->getElementById('personal');
# Returns the span element object with the name "title" if no such element exists undef is returned
my $titleSpan = $container->children->namedItem('title');
# The following variants return undefined instead of null if there's no element with a matching name or id
# Not possible in perl!
# my $firstnameSpan = $container->children->['firstname'];
my $firstnameSpan = $container->children->[1];
my $lastnameSpan = $container->children->lastname;

See Mozilla documentation

AUTHOR

Jacques Deguest <jack@deguest.jp>

SEE ALSO

Mozilla documentation, HTML::Object::Collection

COPYRIGHT & LICENSE

Copyright(c) 2021 DEGUEST Pte. Ltd.

All rights reserved

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