0

jQuery noob 在这里,试图产生交替的行背景颜色。这适用于 HTML:

<script type="text/javascript">
            $(document).ready(function() {
                   $('.stripedtable tr:even td').addClass(" evenrow");
                    alert("Just executed stripedtable jQuery in MasterPage");
            });
</script>

“evenrow” 类被添加到 's 类中,仅适用于偶数行。伟大的!

除非我将它放入 ASP.NET MasterPage 中,否则永远不会添加“evenrow”类。在 FireBug 中,我确认该函数正在执行并且 jQuery 在那里。alert()指示该方法在页面加载后触发。但是,没有“evenrow”类,也没有条纹。

可能相关的是,没有按照我的意愿更改的表是由从 MasterPage 继承的页面上的 UserControl 生成的。

这很奇怪。当我转到查看源代码时,将整个源代码复制到 NoStripes.html,然后在浏览器中打开 HTML 页面,我得到“evenrow”类和条纹。jQuery 工作正常。

这似乎暗示(不知何故)HTML 并不真正存在,当方法从 MasterPage 触发时?所以jQuery不能修改它?!HTML 就在那里,带有 NoStripes.html,因为我保存了生成的源代码?!

我尝试将 $('.stripedtable etc) 放在 UserControl 上的内容占位符上。显示alert()它开火了。没有条纹。

建议?我用谷歌搜索了很长时间,但没有找到解决方案。这可能很简单,但我无法弄清楚。

TIA - 霍伊斯特

4

7 回答 7

1

尝试添加 css 样式而不是类,例如 .css("font-weight", "bold"); 看看你是否有样式表问题

于 2009-09-25T19:29:20.337 回答
1

我敢打赌.NET 对表格做了一些使.stripedtable tr:even td选择器无用的事情。你说你一直在使用萤火虫,我建议摆弄选择器(尝试$(".stripedtable tr:even td")在控制台中看看它选择了什么),如果它没有给你想要的元素,请尝试不使用该.stripedtable部分。

于 2009-09-25T19:35:18.683 回答
0

jQuery 脚本实际上可能在您的表加载到页面之前运行。您可能会尝试在母版页底部添加脚本,甚至使用母版页代码后面的注册脚本方法来确保它是最后加载的内容。

您也可以为您尝试附加您的 jquery 脚本的表发布您的标记。可能有一些奇怪的东西导致不适用。

已编辑我去玩你的 jquery 并拼凑了一个快速母版页、子页示例,这就是我想出的。在母版页的头部使用以下脚本:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $('.stripedtable tr:even').addClass("evenrow");
    alert("Just executed stripedtable jQuery in MasterPage");
});

然后在样式表中我放置了这个定义:

tr.evenrow td {background: Red;} 

然后,我创建了一个控件,然后将您的类名放在表元素上,然后将其放入一个像这样的简单表中:

<table class="stripedtable"><tr><td></td></tr></table>

当我运行页面时,一切都对我有用。我认为问题在于,在您拥有的 jquery 代码中,您将比您需要的低一级。您只需要表格,然后是行,然后是 :even 标记。您的示例代码被扔在 td 元素中,我认为您并不真正需要。

希望这对你有用。

于 2009-09-25T19:25:35.380 回答
0

当我阅读您的标题时,我首先想到的是 ASP.NET 在用户控件中时如何动态命名其字段。而且我认为您可能正在引用像“#mytable”这样的ID,然后将其重命名为“#mycontrol_mytable”。但我看到你引用了一个类名,所以不可能。

可能会影响您的另一件事是文档类型。doctype 有时会影响一些古怪的东西(尤其是在 IE 中)。您是否验证过您在 ASPX 文件中使用的 doctype 与 HTML 文件相同?

您可以尝试使用 StackOverflow 中的文档类型:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
于 2009-09-25T19:33:11.450 回答
0

如有疑问,请设置调试器断点并单步执行代码。基本建议,但它应该可以帮助您找到问题。把'调试器;' 进入文档就绪代码,然后将选择器拆分为单独的 var 分配,以便您可以看到 a) 代码是否完全触发和 b) 它是否正在选择某些内容(长度应大于 0)。如果您没有得到任何选择,请尝试交互式 FireBug 控制台(或 IE 中的 watch 表达式)键入选择器,直到找到正确的选择器。

您可能还想检查您的 CssClass .stripedtable 在呈现的 HTML 文档输出中是否存在。

于 2009-09-25T19:39:57.100 回答
0

确保首先验证最终结果的 HTML。它比以前好多了,但是在过去,.net 控件因吐出无效标记而臭名昭著,这些标记可能会干扰遍历 DOM。

于 2009-09-25T20:09:15.750 回答
0

非常感谢你们。对于菜鸟来说,所有的答案都是有用的。添加 .css() 很聪明。我应用提供的 javascript 来作用于<tr>s 而不是<td>s。突破是我从未使用过的 FireBug 控制台的建议。我一直在寻找一种方法来查看选择器的结果,这一切都不同了。萤火虫太棒了。

这就是我们学习的方式;太糟糕了,太痛苦了。

问题是大小写敏感。在我的 ASP.NET 标记中,我的 CssClass 是“StripedTable”,而我的 jQuery 表达式正在寻找“stripedtable”。我知道 javascript 不区分大小写——但 STRINGS 是,你这个鸟脑子!啊。

顺便说一句,我需要进入<td>关卡,因为我的前辈在关卡中应用了样式,而且它们通常包含背景颜色——所以我不得不修改<td>类以赢得特异性之战。

所以$('.stripedtable tr:even td').addClass(" evenrow");将 's 的类从“CellStyleLeft”更改为“CellStyleLeft evenrow”——而 evenrow 排在最后,所以它赢了!

它终于奏效了。谢谢大家!

——霍伊斯特

于 2009-09-28T21:41:59.337 回答