2016-08-24 3 views
6

私は、センテンス中にリンクを含むダイナミックに生成されたHTMLを使ってShinyアプリケーションを構築しています。残念ながら、私がこれを行うために関数tagsを使用すると、すべての要素には、私が望むかどうかにかかわらず、その周りにスペースがあります。私が書きたかった場合例えば段落内のリンクをシャープにネストすると不要な空白が入ります

は、

これが私のfavorite link everです!

一つは、あなたがこの

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

を行うことができると思うかもしれません。しかし、これはHTMLの仕様によってそれぞれの間にレンダリングされたスペースがあることを意味し、別の行、上にある各要素になります。 (感嘆符の前にスペースを注意してください)

これは私favorite link everでこのようになります

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

HTML(paste0(...))を使用して自分のHTMLを構築する必要がありますか?または、私が紛失している機能を使用する方法がありますか?

ありがとう。

答えて

0

私はあなたがペーストを使用しなければならないと思います。それ以外の場合、ネストは期待どおりには動作しません。

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

結果:

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

あなたは同じライン上のすべての人々を望んでいないでしょう。

助けから:名前付き引数は属性になり、位置引数は子になります。

場合によっては子にならないように位置指定引数を持つことは複雑になります。おそらくあなた自身で構築するのと同じくらいシンプルで、柔軟で、強力ではないでしょう。

+0

1. HTMLビルダーを使用しているShiny開発者が、結果として得られるHTMLがすべて1行にある場合、なぜ気にするのですか?私たち全員が気にかけるように、全体のアウトプットを縮小することができます。 2.改行を保っていても、子供たちを別々の場所に置くことができない理由は何も見当たりませんし、そうでない人もいます。例えば、「div」は「p」はありません。私はこれが特に複雑で驚くべきものだとは思わない。 3.動的に生成されたコンテンツを使用する場合、ヘルパー関数は明示的なHTMLを貼り付けるよりもはるかに洗練された見た目のコードを実際に生成します。これらの関数は、理由のために存在します。 –

+0

ところで、現時点で実際の回答がないので、私は本当にこれを機能要求にしてください。この問題の原因は、htmltoolsパッケージの上流にあると思います。https://github.com/rstudio/htmltools/blob/02678ee19192f406d1aa5c360916f54df09802a1/R/tags.R#L429 –

+0

私はこれを問題として書いています: https://github.com/rstudio/htmltools/issues/92 –

関連する問題