jQuery从TreeView中的所有元素中删除CSS类无法正常工作

时间:2013-09-19 18:35:11

标签: jquery asp.net

我有一个ASP.NET TreeView控件,并且在某些时候会向span元素添加一个CSS类,以警告客户端代码禁用树中的复选框。做完了。

问题是CSS类充当禁用复选框的标志,需要删除。 jQuery预先形成这似乎是直截了当的。

我已阅读以下内容,这似乎是一个明显的解决方案: jQuery Remove CSS Class from all Descendants at once

这是渲染的源代码(它的一部分 - TreeView很大,只知道这些<span>元素是TreeView的后代:

<div id="MainContent_MyTreeView">
   .....
      <span class="disabledTreeviewNode">

所以我需要删除此类时,以下jQuery 正在客户端进行访问:

  function EnableAllCheckBoxes(treeviewClientID) {
     $(treeviewClientID).removeClass('disabledTreeviewNode');
  }

我也尝试了类似的变体:

$(treeviewClientID + ' span').removeClass('disabledTreeviewNode');

$(treeviewClientID + ' span').removeClass();

$(treeviewClientID).removeClass();

不幸的是,在我检查页面并运行jQuery之后,该类尚未被删除:

<div id="MainContent_MyTreeView" onclick="OnTreeClick(event)">
    <table style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px;" cellspacing="0" cellpadding="0">
    <div id="MainContent_MyTreeViewn0Nodes" style="display: block;">
        <table style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px;" cellspacing="0" cellpadding="0">
            <tbody>
                <tr>
                    <td>
                    <td>
                    <td>
                        <input name="MainContent_MyTreeViewn1CheckBox" id="MainContent_MyTreeViewn1CheckBox" type="checkbox"/>
                            <span id="MainContent_MyTreeViewst1" style="font-weight: bold; text-decoration: none;">
                                <span class="disabledTreeviewNode">
                                    Text - My Description

我需要删除的课程如下所示<span>

<span class="disabledTreeviewNode">

我也尝试过以下无效的方法:

     **$(treeviewClientID + ' span').filter(function () {
        return $(this);
     }).removeClass('disabledTreeviewNode');**

treeviewClientID是正确的,因为我已经用它来操纵树的其他部分,以便值正常工作。

有关为什么不在TreeView控件中的子<span>元素上删除该类的原因,或者我可能做错了什么?

编辑:将完整的HTML添加到<span>,但未删除该类。

2 个答案:

答案 0 :(得分:1)

根据您的代码,删除过程似乎没问题。我相信发生了什么(你没有说明)你的选择器是错误的。我假设您将'MainContent_MyTreeView'传递给函数EnableAllCheckBoxes。但是,在jQuery中通过ID引用某些内容,您需要在选择器中使用“#”。要么调用函数:

EnableAllCheckBoxes('#MainContent_MyTreeView');

或者像这样修改函数:

function EnableAllCheckBoxes(treeviewClientID) {
     $('#' + treeviewClientID).removeClass('disabledTreeviewNode');
  }

答案 1 :(得分:0)

您希望从列表的后代中删除该类,而不是从列表本身中删除该类。 在这种情况下,您应该使用:

function EnableAllCheckBoxes(treeviewClientID) {
     $('span.disabledTreeviewNode', '#' + treeviewClientID).removeClass('disabledTreeviewNode');
  }

这意味着:任何位于span以下的CSS类disabledTreeviewNode的{​​{1}}都会删除CSS类#treeviewClientID


我们调试

将您的功能修改为:

disabledTreeviewNode

点击F12,转到控制台标签并刷新页面。验证控制台上记录的内容并尝试对其进行故障排除。


修改

根据您添加到问题的HTML,我确定

function EnableAllCheckBoxes(treeviewClientID) {
     console.log(treeviewClientID);
     console.log($('span.disabledTreeviewNode', treeviewClientID));
     $('span.disabledTreeviewNode', treeviewClientID).removeClass('disabledTreeviewNode');
  }

应该可以正常工作。事实上,如果您在问题处打开控制台并运行

$('span.disabledTreeviewNode', '#MainContent_MyTreeView').removeClass('disabledTreeviewNode');

你会发现它按预期工作。这是相同的逻辑。

你能检查一下是否还有其他事情?