1

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

下面的代码Javascript块遍历在 ASP.NET TreeView 控件客户端呈现的复选框,并扫描带有 a 的复选框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。我尝试使用 jQuery 等价物,.find但随后代码开始表现不同,我有点迷茫。

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

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

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

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

4

2 回答 2

3
$('#' + treeviewClientID + ' span:has(.disabledTreeviewNode) input')
    .prop('disabled', true);
于 2013-09-17T20:02:49.070 回答
3

许多 jQuery 对象的方法.each()在后台调用方法,因此您不必遍历集合,jQuery 会为您完成这项工作。

$('#' + treeviewClientID + ' input').filter(function() {
     return $(this.parentNode).find('.disabledTreeviewNode').length;
}).prop('disabled', true);
于 2013-09-17T20:14:25.017 回答