2

我有这段代码在javascript中工作:

(document.querySelectorAll('[rel="next"]'))[0].click()

我正在尝试在parenscript(来自 Common Lisp 生态系统的库)中编写相同的内容。我当前草图中的表达式正在由 REPL 在一个名为 Nyxt available here的包下进行评估。

CL-USER> (in-package :nyxt)

Nyxt 被设计成一个无限可扩展的浏览器。因此,用户可以在程序运行时更改代码和/或创建扩展。这是设计的实时可破解性。

这是代码:

(ps:chain document (query-selector-all "[rel=next]")) (click))

使用ps:ps我可以“看到” parenscript 正在构建什么:

NYXT> (ps:ps (ps:chain document (query-selector-all "[rel=next]") (click)))
"document.querySelectorAll('[rel=next]').click();"

上面的结果接近我所需要的。但是,仍然缺少一件事:在.click().

我有一些失败的 尝试

  1. 如果我尝试:
NYXT> (ps:ps (ps:chain document (query-selector-all "[rel=next]") [0] (click)))

我得到一个额外的“。”:

"document.querySelectorAll('[rel=next]').[0].click();"
  1. 如果我尝试:
NYXT> (ps:ps (ps:chain document (query-selector-all "[rel=next]") ([0]) (click)))

我得到一个额外的“。” 和不必要的“()”:

"document.querySelectorAll('[rel=next]').[0]().click();"
  1. 如果我尝试:
NYXT> (ps:ps (ps:chain document (query-selector-all "[rel=next]")[0] (click)))

我得到一个额外的“。”:

"document.querySelectorAll('[rel=next]').[0].click();"
  1. 如果我尝试:
NYXT> (ps:ps (ps:chain document (query-selector-all "[rel=next]" [0]) (click)))

我得到一个额外[0]的论点:

"document.querySelectorAll('[rel=next]', [0]).click();"

我该如何插入它?

4

1 回答 1

4

偶然地,我发现了答案,诀窍就是在0没有的情况下通过[]


NYXT> (ps:ps (ps:chain document  (query-selector-all "[rel=next]") 0 (click)))

"document.querySelectorAll('[rel=next]')[0].click();"

我认为 parenscript 可以有更多的教程和文档。我一直在努力。因此,我把它留在这里是为了帮助像我这样的其他 Common Lisp 新手 :)

于 2021-06-28T21:13:46.477 回答