将扫描转换为类名 JavaScript 块以使用 jQuery

Convert Scanning For className JavaScript block to use jQuery

本文关键字:jQuery JavaScript 扫描转换      更新时间:2023-09-26

我有一个小块,我想转换为使用jQuery来实现几个不同的目的,但主要是逆向工程它的工作原理,以提高我的jQuery技能。我尝试尝试一下,但无法弄清楚所有的转换。

以下Javascript块遍历 ASP.NET TreeView 控件客户端中呈现的复选框,并使用className=disabledTreeviewNode扫描复选框(此等效功能无法单独实现服务器端)。

  function DisableCheckBoxes(treeviewClientID) {
     var treeView = document.getElementById(treeviewClientID);       
     if (treeView) {
        //Get all the checkboxes which are 'inputs' in the treeview
        var childCheckBoxes = treeView.getElementsByTagName("input");
        //Iterate through the checkboxes and disable any checkbox that has a className="disabledTreeviewNode"
        for (var i = 0; i < childCheckBoxes.length; i++) {
           var textSpan = childCheckBoxes[i].parentNode.getElementsByTagName("span")[0];
           if (textSpan != null && textSpan.firstChild)
              if (textSpan.className == "disabledTreeviewNode" || textSpan.firstChild.className == "disabledTreeviewNode")
                 childCheckBoxes[i].disabled = true;
        }
     }
  }

我尝试更改以下内容:

var treeView = document.getElementById(treeviewClientID); 

var treeView = $('#' + treeviewClientID); 

但是,那时我不能再打电话给getElementsByTagName了。我尝试使用.find的jQuery等效,但随后代码的行为开始不同,我有点迷茫。

任何人都可以帮助转换这个小块以使用 jQuery?欢迎评论这是否值得,或者是否有更好的方法。

编辑:class=disabledTreeviewNode被分配在服务器端,如下所示:

tn.Text = "<span class=disabledTreeviewNode>" + tn.Text + "</span>";

这有点像黑客/标志,因此客户端代码可以读取它并将其设置为级,即复选框disabled。为什么是父母?我无法直接在代码中的复选框上设置类,因为该属性不可访问。技巧:将TreeView对象的.Text设置为具有<span class=disabledTreeviewNode>值,然后将其父级(复选框)设置为禁用的客户端。

jQuery 对象的许多方法在幕后调用.each()方法,因此您不必遍历集合,jQuery 会为您执行此操作。

$('#' + treeviewClientID + ' input').filter(function() {
     return $(this.parentNode).find('.disabledTreeviewNode').length;
}).prop('disabled', true);
$('#' + treeviewClientID + ' span:has(.disabledTreeviewNode) input')
    .prop('disabled', true);