2016-08-24 708 views
6

Buduję błyszczącą aplikację z dynamicznie generowanym kodem HTML, która zawiera łącze w środkowym zdaniu. Niestety, jeśli używam do tego funkcji tags, każdy element ma wokół niego przestrzeń, czy tego chcę, czy nie.Błyszczące zagnieżdżanie łącza w akapicie ma niepożądaną białą przestrzeń.

Na przykład, jeśli chciałem napisać

To mój favorite link ever!

Można by pomyśleć można zrobić to

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

Ale to powoduje każdego elementu będącego w osobnej linii, która według specyfikacji HTML oznacza, że ​​nie będzie miejsca świadczonych między sobą.

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

Która wygląda następująco (zauważ przestrzeń przed wykrzyknikiem)

To mój favorite link ever!

Czy muszę uciekać się do korzystania HTML(paste0(...)) skonstruować mój HTML, czy jest jakiś technika używając tags funkcje, które mi brakuje?

Dzięki ..

Odpowiedz

0

Myślę, że trzeba użyć pasty. W przeciwnym razie zagnieżdżanie nie działa tak, jak powinno.

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

Wynik:

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

Nie chcesz tych wszystkich, na tej samej linii.

Z pomocy: Nazwane argumenty stają się atrybutami, a argumenty pozycyjne stają się dziećmi.

Bardziej złożona byłaby argumentacja pozycyjna, aby niekiedy nie być dziećmi; i prawdopodobnie nie byłby tak prosty, elastyczny i potężny, jak tylko sam go skonstruował.

+0

1. Dlaczego programista Shiny korzystający z funkcji budowniczych HTML powinien dbać, jeśli wynikowy kod HTML znajduje się w jednym wierszu? Dla wszystkich zależy nam, aby cała produkcja mogła zostać zminimalizowana. 2. Nawet przy zachowaniu podziałów linii, nie widzę powodu, dla którego nie moglibyśmy mieć funkcji umieszczających dzieci w oddzielnych liniach, a niektórzy nie - "div", na przykład "p" nie. Nie sądzę, że jest to szczególnie skomplikowane lub zaskakujące. 3. Podczas korzystania z dynamicznie generowanych treści, funkcje pomocnicze w rzeczywistości generują znacznie czystszy kod, niż wklejanie jawnego kodu HTML. Te funkcje istnieją z jakiegoś powodu. –

+0

BTW, naprawdę powinienem zrobić to żądanie funkcji, ponieważ obecnie nie ma rzeczywistej odpowiedzi. Źródło tego problemu uważam za wcześniejsze w pakiecie 'htmltools', tutaj: https://github.com/rstudio/htmltools/blob/02678ee19192f406d1aa5c360916f54df09802a1/R/tags.R#L429 –

+0

Napisałem to jako problem: https://github.com/rstudio/htmltools/issues/92 –