闪亮的段落内嵌套 link 有不需要的空格

Shiny nesting a link within a paragraph has unwanted whitespace

我正在构建一个闪亮的应用程序,其中包含一些动态生成的 HTML,其中包括一个 link 在中间的句子。不幸的是,如果我使用 tags 函数来执行此操作,无论我是否想要,每个元素周围都有一个 space。

比如我想写

This is my favorite link ever!

有人可能认为你可以做到这一点

p('This is my ', a(href = 'https://whosebug.com/', 'favorite link ever'), '!')

但这会导致每个元素都在单独的一行上,根据 HTML 规范,这意味着每个元素之间将呈现 space。

<p>
  This is my 
  <a href="https://whosebug.com/">favorite link ever</a>
  !
</p>

看起来像这样(注意感叹号前的 space)

This is my favorite link ever !

我是否必须求助于使用 HTML(paste0(...)) 来构建我的 HTML,或者是否有一些技巧可以使用我缺少的 tags 函数?

谢谢..

我认为你必须使用粘贴。否则嵌套将无法像预期的那样工作。

div(p('hi'),p('what up'),p(HTML(paste0('This is my ',a(href = 'https://whosebug.com/', 'favorite link ever'),'!'))))

结果:

<div>
  <p>hi</p>
  <p>what up</p>
  <p>This is my <a href="https://whosebug.com/">favorite link ever</a>!</p>
</div>

您不会希望所有这些都在同一条线上。

来自帮助:命名参数变为属性,位置参数变为 children。

位置参数有时也不是 children 会更复杂;并且可能不会像自己构建它那样简单、灵活和强大。

这个问题已通过一项名为 .noWS 的新功能解决。 Quoting Carson Sievert:

you can now do:

p('This is my ', a(href = 'https://whosebug.com/', 'favorite link ever', .noWS = "outside"), '!', .noWS = c("after-begin", "before-end")) 

which yields

<p>This is my <a href="https://whosebug.com/">favorite link ever</a>!</p>

有关 .noWS 参数的更多信息,请参见 pull request