2016-08-24 31 views
6

我正在用一些動態生成的HTML構建一個Shiny應用程序,其中包含鏈接在句子中間。不幸的是,如果我使用tags函數來做到這一點,那麼無論我是否需要它,每個元素都有一個空間。閃閃發亮嵌套段落中的鏈接有不需要的空白

例如,如果我想寫

這是我的favorite link ever

有人可能會認爲你可以做到這一點

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

但是這會導致每一個元素是在單獨一行,其中由HTML規範意味着將有各自之間呈現的空間。

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

就像這樣(注意感嘆號前的空格)

這是我的favorite link ever

我必須求助於使用HTML(paste0(...))構建我的HTML,或者是有一些技術使用tags功能我失蹤?

謝謝..

回答

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是否都在同一行上?對於我們所有人來說,整個產出可以被縮小。 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 –