为什么要在闪亮的应用程序中使用 tagQuery()?
Why use tagQuery() in shiny apps?
我读过这个 article on tagQuery 并且想知道在闪亮的应用程序中有什么实际用途。
是不是在服务端修改一个tag,类似shinyjs::addClass()
?
我认为当您需要修改或提取部分内容时,它最有用
潜在的深层嵌套 HTML 结构。特别是可能会出现这种需要
在您无法控制创建原始结构的情况下,
但要依靠一个包来为你做到这一点。
举个真实的例子,
可以从使用 tagQuery()
.
中获益
作为设置,我们有一个动态生成的菜单。在那里,我们要添加
一个 id
属性到里面的 ul
元素,以便以后能够
使用 JavaScript.
定位该元素
library(shinydashboard, warn.conflicts = FALSE)
library(htmltools)
tabs_list <- lapply(1:2, function(x) {
menuSubItem(text = paste("tab", x))
})
menu <- menuItem("test_tabs", tabs_list)
print(menu)
#> <li class="treeview">
#> <a href="#">
#> <span>test_tabs</span>
#> <i class="fa fa-angle-left pull-right" role="presentation" aria-label="angle-left icon"></i>
#> </a>
#> <ul class="treeview-menu" style="display: none;" data-expanded="test_tabs">
#> <li>
#> <a href="#">
#> <i class="fa fa-angle-double-right" role="presentation" aria-label="angle-double-right icon"></i>
#> tab 1
#> </a>
#> </li>
#> <li>
#> <a href="#">
#> <i class="fa fa-angle-double-right" role="presentation" aria-label="angle-double-right icon"></i>
#> tab 2
#> </a>
#> </li>
#> </ul>
#> </li>
这是原来的方法:
menu_orig <- menu
menu_orig$children[[2]] <- tagAppendAttributes(menu_orig$children[[2]], id = "test_tabs")
有了 tagQuery()
这会更容易理解也更健壮:
menu_tq <- tagQuery(menu)$find("ul")$addAttrs(id = "test_tabs")$allTags()
# Check that we got the same result
identical(format(menu_orig), format(menu_tq))
#> [1] TRUE
我想补充一下@MikkoMarttila 回答的几个方面(评论太长):
tagQuery
为您提供了在 R 中操作 HTML 标签的可能性(不需要 JS)。
请参阅 Outstanding User Interfaces with Shiny 中的 this section 以获取大量优秀示例。
我最近给出了一个相关的答案 ,它展示了如何制作一个闪亮的应用程序 w3c 兼容 - 因此 tagQuery
可以帮助您准备好应用程序生产(关于 UI).
另请注意,tagQuery
可以在 renderUI
调用中/与调用一起动态使用 - 请参阅 示例。
我读过这个 article on tagQuery 并且想知道在闪亮的应用程序中有什么实际用途。
是不是在服务端修改一个tag,类似shinyjs::addClass()
?
我认为当您需要修改或提取部分内容时,它最有用 潜在的深层嵌套 HTML 结构。特别是可能会出现这种需要 在您无法控制创建原始结构的情况下, 但要依靠一个包来为你做到这一点。
举个真实的例子,tagQuery()
.
作为设置,我们有一个动态生成的菜单。在那里,我们要添加
一个 id
属性到里面的 ul
元素,以便以后能够
使用 JavaScript.
library(shinydashboard, warn.conflicts = FALSE)
library(htmltools)
tabs_list <- lapply(1:2, function(x) {
menuSubItem(text = paste("tab", x))
})
menu <- menuItem("test_tabs", tabs_list)
print(menu)
#> <li class="treeview">
#> <a href="#">
#> <span>test_tabs</span>
#> <i class="fa fa-angle-left pull-right" role="presentation" aria-label="angle-left icon"></i>
#> </a>
#> <ul class="treeview-menu" style="display: none;" data-expanded="test_tabs">
#> <li>
#> <a href="#">
#> <i class="fa fa-angle-double-right" role="presentation" aria-label="angle-double-right icon"></i>
#> tab 1
#> </a>
#> </li>
#> <li>
#> <a href="#">
#> <i class="fa fa-angle-double-right" role="presentation" aria-label="angle-double-right icon"></i>
#> tab 2
#> </a>
#> </li>
#> </ul>
#> </li>
这是原来的方法:
menu_orig <- menu
menu_orig$children[[2]] <- tagAppendAttributes(menu_orig$children[[2]], id = "test_tabs")
有了 tagQuery()
这会更容易理解也更健壮:
menu_tq <- tagQuery(menu)$find("ul")$addAttrs(id = "test_tabs")$allTags()
# Check that we got the same result
identical(format(menu_orig), format(menu_tq))
#> [1] TRUE
我想补充一下@MikkoMarttila 回答的几个方面(评论太长):
tagQuery
为您提供了在 R 中操作 HTML 标签的可能性(不需要 JS)。
请参阅 Outstanding User Interfaces with Shiny 中的 this section 以获取大量优秀示例。
我最近给出了一个相关的答案 tagQuery
可以帮助您准备好应用程序生产(关于 UI).
另请注意,tagQuery
可以在 renderUI
调用中/与调用一起动态使用 - 请参阅