【问题标题】:How to remove selected underline and line-through in the js tree?如何在js树中删除选定的下划线和换行?
【发布时间】:2020-06-23 05:59:31
【问题描述】:

我在移除 js 树中的换行时遇到问题。例如,现在我的树节点是 199 test Rujuk Kod:100-1-1。我在 199 测试 Rujuk Kod:100-1-1 中添加了换行符。但我只想添加 199 测试,Rujuk Kod:100-1-1 不想添加 line-through。希望有人能帮我解决这个问题。谢谢。

下面是我的代码:

<?php 

$folderData = mysqli_query($mysql_con,"SELECT * FROM filing_code_management");
$folders_arr = array();
 while($row = mysqli_fetch_assoc($folderData)){
 $parentid = $row['parentid'];
$siri_pindaan = $row['siri_pindaan'];
$effective_date = $row['effective_date'];
 $filing_code_refer = $row['filing_code_refer'];
$filing_code_link = $row['filing_code_link'];
        if ($filing_code_refer != NULL) {
        $refer_to_code = "Rujuk Kod:";
        }
        if ($filing_code_refer == NULL) {
        $refer_to_code = " ";
        }
        if ($filing_code_link != NULL) {
        $link_to_code = "Berhubung Kod:";
        }
        if ($filing_code_link == NULL) {
        $link_to_code = " ";
        }

    
      if($parentid == '0') $parentid = "#";

      $selected = false;$opened = false;
      if($row['id'] == 2){
         $selected = true;$opened = true;
      }
      $folders_arr[] = array(
    
         "id" => $row['id'],
         "parent" => $parentid,
         "text" => $row['name'] . ' ' ."<span id='open' style='font-size:9px;'>".$refer_to_code .$row['filing_code_refer']."</span>" .' '. "<span id='open' style='font-size:9px;'>".$link_to_code .$row['filing_code_link']."</span>" .' '. "<span id='open' style='font-size:9px;'>".$row['description_update']."</span>",
         "category" => $row['category'],
         "filing_code_refer" => $row['filing_code_refer'],
         // "status" => $row['status'], // status 0 is inactive, status 1 is active
         "data" => array("status" => $row['status'],"add_underline"=>$row['add_underline']) ,
         "state" => array("selected" => $selected,"opened"=>$opened) 
     
      );
   }

   ?> 

<script>
 var colorNodes = function(nodelist) {
        var getStrike = function(status) {
      if (status === "0") {
        return "line-through";
      }  else {
        return "";
      }
    };
    
        var getUnderline = function(add_underline) {
      if (add_underline === "1") {
        return " underline;text-underline-position: under;";
      }  else {
        return "";
      }
    };
      var tree = $('#folder_jstree').jstree(true);
      nodelist.forEach(function(n) {
        tree.get_node(n.id).a_attr.style = "color:" + getColor(parseInt(n.text.substr(0, 3), 10))+ ";"+"text-decoration:" + getStrike(n.data.status) + getUnderline(n.data.add_underline);
        tree.redraw_node(n.id); //Redraw tree
        colorNodes(n.children); //Update leaf nodes
      });
    };
</script>

这是我的 jsfiddle:https://jsfiddle.net/mLr5w2pd/1/

我的预期结果如下图:

更新 下面是展示js树中的内容。

<!-- Initialize jsTree -->
            <div id="folder_jstree" title=""></div>
            <!-- Store folder list in JSON format -->
            <textarea style="" id='txt_folderjsondata'><?= json_encode($folders_arr) ?></textarea>

更新 2

【问题讨论】:

  • 将状态改为“1”而不是“0”。正如您在getStrike() 中看到的那样。
  • @Lain 状态无法更改为 0,因为需要检查此节点是否处于活动状态
  • 如果 inactive 0 将显示 line-through。但现在我只想要 Rujuk Kod:100-1-1 不需要穿线
  • 嗯,这不是它默认的工作方式。给那些span 上课,然后在课堂上取消。
  • 感谢@Lain 给我建议。你能在下面告诉我哪些代码需要编辑吗?如果正确的话我可以给你打分。

标签: javascript css jstree


【解决方案1】:

在css下面添加,使jstree-anchor中的spaninline-block,那么它就不会有'line-through'

.jstree-anchor span {
    display: inline-block;
}

检查小提琴https://jsfiddle.net/mL407ya1/

如果你注意到你最后有line-through,那是因为下面的代码行#2 (text)-

{
 "id":"753","parent":"#",
 "text":"199 test <span id='open' style='font-size:9px;'>Rujuk Kod:190-1-1<\/span> <span id='open' style='font-size:9px;'> <\/span> <span id='open' style='font-size:9px;'> <\/span>",
 "category":"jtm",
  "filing_code_refer":"190-1-1",
  "data":{"status":"0","add_underline":"0"},
  "state":{"selected":false,"opened":false}
}

如果您可以删除&lt;span&gt;&lt;/span&gt; 之间的空格,它将按预期工作。

更新

如果您无法从源代码中删除空格,则可以在代码中使用正则表达式删除空格。当您将字符串解析为 json 数组时,请在解析之前删除多余的空间。试试下面

let txtVal = $('#txt_folderjsondata').val();
txtVal = txtVal.replace(/> </g, '><');
var folder_jsondata = JSON.parse(txtVal);

试试下面的小提琴。 https://jsfiddle.net/mL407ya1/1/

【讨论】:

  • 感谢您的回答。最后一行可以去掉吗?
  • 我们可以使用正则表达式删除多余的空格。让我更新答案
  • 感谢@Deepak。你绝对聪明。
  • 我认为您应该使用 javascript。如果你有时间可以帮我看看这个问题stackoverflow.com/questions/62524992/…
  • 嗨@Deepak Sharma。我有一个类似于 js 编码的问题。如果你有时间可以帮我检查一下。谢谢。 stackoverflow.com/questions/62669094/show-color-in-js-nodes
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2016-04-04
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多