You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Mojo::DOM设置节点属性?代码未生效问题求助

问题分析与解决方案

你遇到的问题核心是重复使用my关键字声明变量$a,这会在词法作用域内创建一个新的变量,导致你调用attr方法时实际上是在操作一个未初始化的变量(虽然看起来是同一个变量名,但Perl会将其视为全新的词法变量),最终原DOM对象的属性根本没有被修改。

错误代码的问题拆解

看你这段代码:

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

第二个my $a会重新声明一个词法变量,此时右边的$a指向的是这个新的、未初始化的变量(而不是之前创建的Mojo::DOM对象)。虽然这段代码没有报错(Perl对这种情况的处理比较宽松),但实际上attr方法并没有作用在你最初创建的<a>节点上,所以最终输出还是原始的空<a>标签。

修正后的代码

只需要去掉第二个my即可,Mojo::DOM的attr方法在设置属性时会直接修改原对象,也支持链式调用:

方式一:直接修改原对象(推荐)

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

方式二:链式调用(简洁写法)

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

运行修正后的代码,就能得到你预期的输出:<a href="https://foo/bar"></a>

内容的提问来源于stack exchange,提问作者simone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:23