diff --git a/R/htmlTable_styling.R b/R/htmlTable_styling.R
index 98da798..dcd0c96 100644
--- a/R/htmlTable_styling.R
+++ b/R/htmlTable_styling.R
@@ -1,12 +1,13 @@
 #' HTML table attributes
 #'
-#' @description This function provides a set of shortcuts to common HTML table
-#' formats
+#' @description This function provides a cleaner approach to modify the style
+#' of HTML tables other than using the `table.attr` option in `knitr::kable()`.
+#' Currenly, it assumes the HTML document has boot
 #'
 #' @param bootstrap_options A character vector for bootstrap table options. For
 #' detailed information, please check the package vignette or visit the
 #' w3schools' \href{https://www.w3schools.com/bootstrap/bootstrap_tables.asp}{Bootstrap Page}
-#' . Possible options include "bs-table", "striped", "bordered", "hover",
+#' . Possible options include "basic", "striped", "bordered", "hover",
 #' "condensed" and "responsive".
 #' @param full_width A `TRUE` or `FALSE` variable controlling whether the HTML
 #' table should have 100\% width.
@@ -15,47 +16,59 @@
 #' @param font_size A numeric input for table font size
 #'
 #' @export
-htmlTable_styling <- function(bootstrap_options = "bs-table",
-                             full_width = T,
-                             float = c("center", "left", "right"),
-                             font_size = NULL) {
+htmlTable_styling <- function(kable_input,
+                              bootstrap_options = "basic",
+                              full_width = T,
+                              float = c("center", "left", "right"),
+                              font_size = NULL) {
+  kable_xml <- read_xml(as.character(kable_input), options = c("COMPACT"))
+
+  # Modify class
   bootstrap_options <- match.arg(
     bootstrap_options,
-    c("bs-table", "striped", "bordered", "hover", "condensed", "responsive"),
+    c("basic", "striped", "bordered", "hover", "condensed", "responsive"),
     several.ok = T
   )
 
-  table_attr_class <- character()
-  if (length(bootstrap_options) == 1 && bootstrap_options == "bs-table") {
-    table_attr_class <- "class='table'"
-  } else {
-    bootstrap_options <- bootstrap_options[bootstrap_options != "bs-table"]
-    bootstrap_options <- paste0("table-", bootstrap_options)
-    table_attr_class <- paste0("class='table ",
-                               paste0(bootstrap_options, collapse = " "), "'")
+  kable_xml_class <- NULL
+  if (xml_has_attr(kable_xml, "class")) {
+    kable_xml_class <- xml_attr(kable_xml, "class")
   }
+  if (length(bootstrap_options) == 1 && bootstrap_options == "basic") {
+    bootstrap_options <- "table"
+  } else {
+    bootstrap_options <- bootstrap_options[bootstrap_options != "basic"]
+    bootstrap_options <- paste0("table-", bootstrap_options)
+    bootstrap_options <- c("table", bootstrap_options)
+  }
+  xml_attr(kable_xml, "class") <- paste(c(kable_xml_class, bootstrap_options),
+                                        collapse = " ")
 
-  table_attr_style <- c()
+  # Modify style
+  kable_xml_style <- NULL
+  if (xml_has_attr(kable_xml, "style")) {
+    kable_xml_style <- xml_attr(kable_xml, "style")
+  }
   if (!is.null(font_size)) {
-    table_attr_style <- c(table_attr_style,
+    kable_xml_style <- c(kable_xml_style,
                           paste0("font-size: ", font_size, "px;"))
   }
   if (!full_width) {
-    table_attr_style <- c(table_attr_style, "width: auto !important;")
+    kable_xml_style <- c(kable_xml_style, "width: auto !important;")
   }
 
   float <- match.arg(float)
   if (float == "center") {
-    table_attr_style <- c(table_attr_style,
+    kable_xml_style <- c(kable_xml_style,
                           "margin-left:auto; margin-right:auto;")
   }
   if (float == "right") {
-    table_attr_style <- c(table_attr_style,
+    kable_xml_style <- c(kable_xml_style,
                           "float: right;")
   }
-  if (length(table_attr_style) != 0) {
-    table_attr_style <- paste0("style = '",
-                               paste0(table_attr_style, collapse = " "), "'")
+  if (length(kable_xml_style) != 0) {
+    xml_attr(kable_xml, "style") <- paste(kable_xml_style, collapse = " ")
   }
-  return(paste(table_attr_class, table_attr_style))
+  return(structure(as.character(kable_xml), format = "html",
+                   class = "knitr_kable"))
 }
