【问题标题】:How do I set a node's attribute with Mojo::DOM?如何使用 Mojo::DOM 设置节点的属性?
【发布时间】:2023-03-10 15:44:01
【问题描述】:

我正在尝试使用 Mojo::DOM 设置一个属性,如下所示:

use Mojo::DOM;

my $a = Mojo::DOM->new('<a></a>');
my $a = $a->attr({ 'href' => 'https://foo/bar' });
print $a;

我希望它打印出来

<a href="https://foo/bar"></a>

但我明白了

<a></a>

我做错了什么?

【问题讨论】:

    标签: perl mojolicious


    【解决方案1】:

    需要先find and return元素,该元素的属性会发生变化

    use warnings;
    use strict;
    use feature 'say';
    use Mojo::DOM;
    
    my $dom = Mojo::DOM->new('<a></a>');
    
    $dom->at('a')->attr({ 'href' => 'https://foo/bar' });
    
    say $dom;
    

    这是必需的,因为整棵树没有“属性”。如开头的docs say

    虽然所有节点类型都表示为 Mojo::DOM 对象,但 attrnamespace 等一些方法仅适用于元素。

    (“elements”是“tag”类型的节点,见链接)

    【讨论】:

    • 工作,谢谢!但为什么?它们都是 Mojo::DOM 对象...(顺便说一句 - 代码中的错字:而不是 ;)
    • @simone 他们确实是——但我猜这棵树只是没有“属性”。添加以回答文档对此的看法。
    • 在 DOM 术语中,$dom 是一个 document 节点,$dot-&gt;at('a') 是一个 element 节点。只有元素有属性。
    最近更新 更多