我有一个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>
,但未删除该类。
答案 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');
你会发现它按预期工作。这是相同的逻辑。
你能检查一下是否还有其他事情?