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::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.