如何正确地使用Javascript来将gt表中的行元素作为目标

如何正确地使用Javascript来将gt表中的行元素作为目标,javascript,r,shiny,shinyjs,gt,Javascript,R,Shiny,Shinyjs,Gt,我正在用gt表制作一个闪亮的应用程序。 我希望将.gt_group_标题类中的文本大写 似乎传递到此元素的任何文本都是在td标记中创建的纯文本,而不是被识别为HTML 所以我想也许我可以用Javascript改变文本的外观 运行应用程序时,无法使脚本正常工作。 我得到以下错误: Uncaught TypeError: Cannot read property 'innerHTML' of null at (index):22 然而,当我运行应用程序,然后直接在浏览器控制台中键入javascr

我正在用gt表制作一个闪亮的应用程序。
我希望将.gt_group_标题类中的文本大写

似乎传递到此元素的任何文本都是在td标记中创建的纯文本,而不是被识别为HTML

所以我想也许我可以用Javascript改变文本的外观

运行应用程序时,无法使脚本正常工作。
我得到以下错误:

Uncaught TypeError: Cannot read property 'innerHTML' of null
at (index):22 
然而,当我运行应用程序,然后直接在浏览器控制台中键入javascript时,我能够得到大写的文本以粗体显示

那么,是不是有什么东西让代码无法正常运行?似乎我需要在创建GT表之后运行代码,也许这就是错误消息抛出null的原因——但我不知道如何使事件的顺序以正确的方式发生

仅供参考,我已尝试使用html标记将字符串包装在df$name中,但这无法正确呈现,即以下操作不起作用:

`df$name <- mutate(df$name, paste("<b>", df$name, "</b>"))`    
`df$name%
opt_css(
css=”
#一.gt组标题{
空白:预包装;
单词包装:打断单词;
}
"
)
)
}
shinyApp(用户界面、服务器)

一种可能性是使用
设置超时延迟JavaScript代码的执行,例如2秒:

setTimeout(函数(){
var heading=document.querySelector('one>table>tbody>tr>td');
var html=heading.innerHTML;
html=html.replace(/(\b[A-Z]{2,}\b)/g,$1);
heading.innerHTML=html;
}, 2000); // 2000ms=2s
如何选择一个合适的延迟值永远都不清楚。另一种可能是使用间隔,每隔100ms执行一次,直到找到对象:

var myinterval=setInterval(函数(){
var heading=document.queryselectoral('one>table>tbody>tr>td');
若有(标题){
clearInterval(myinterval);

对于(var i=0;我必须澄清:您希望将组标题加粗并大写?并且您不希望使用
text\u format
tab\u options
,但使用JavaScript?我希望找到一种不使用JavaScript的方法。但是,我不知道有任何方法来格式化传递给groupname\u col的列中的文本。理想情况下,我使用JavaScript我希望任何带有大写字母的文本都是粗体的。我希望能够灵活地在groupname_col(组标题)中格式化文本,但我在gt_表中看不到这一功能,所以我尝试向应用程序添加javascript来实现这一点……谢谢你-不幸的是,当我提供你的第二个解决方案(var myinterval)时当我检查浏览器控制台时,我在参数列表后看到以下{127.0.0.1/:29未标记的语法错误:丢失)}。我希望每个.gt_group_标题元素中的每个大写单词都是粗体的,以便所有的名称(john、jerry、jack、jim)粗体。当我将代码粘贴到我的应用程序中时,我是否遗漏了什么?@mdb_ftl和第一个解决方案,是否有效?如果无效,则正则表达式中的反斜杠可能有问题。可能需要将反斜杠加倍或加倍。你是对的!我需要向正则表达式中添加额外的\项-我还添加了一个循环以针对所有td行在表中-我已经编辑了您的解决方案,希望这是确定的-感谢您的帮助
library(tidyverse)
library(gt)
library(shiny)

df <- tibble(

  name = c("john", "john", "jerry", "jerry", "jack", "jack", "jim", "jim"), 
  day = c("wed", "wed", "thurs", "thurs", "mon", "mon", "tues", "tues"), 
  lotto = c(12, 42, 24, 57, 234, 556, 34, 23), 
  car = c("chevy", "toyota", "honda", "gmc", "tesla", "nissan", "ford", "jeep")

) %>% 
  mutate(name = toupper(name))

options(gt.row_group.sep = "\n")

ui <- fluidPage(

  gt_output("table"),

  tags$script(
    HTML(
  
     "
    var heading = document.querySelector('#one > table > tbody > tr > td');
    var html = heading.innerHTML;
    html = html.replace(/(\b[A-Z]{2,}\b)/g,'<strong>$1</strong>');
    heading.innerHTML = html;

    "
    )
  )



)


server <- function(input, output, session){


  output$table <- render_gt(



    df %>% 
      arrange(lotto) %>%
      gt(
    
        id = "one",
        groupname_col = c("name", "day"), 
        rownames_to_stub = TRUE, 
        row_group.sep = getOption("gt.row_group.sep", "\n")
    
      ) %>%
  
      opt_css(
        css = "

    #one .gt_group_heading {

    white-space:pre-wrap;
    word-wrap:break-word;


    }

    "
      )

  )

}

shinyApp(ui, server)