【问题标题】:Javascript function locating right elementJavascript函数定位正确的元素
【发布时间】:2010-11-16 16:25:14
【问题描述】:

这是部分标记:

 <tr class="Comment">        
    <td  class="CommentCheck">
       <input id="ctl00_col2_rptComments_ctl01_chkBox" type="checkbox" name="ctl00$col2$rptComments$ctl01$chkBox" /> 
       <input type="hidden" name="ctl00$col2$rptComments$ctl01$hdnFldItemID" id="ctl00_col2_rptComments_ctl01_hdnFldItemID" value="35" />
    </td>

    <td class="CommentBy" >
        <span id="ctl00_col2_rptComments_ctl01_lblUserName" title="Posted by name">Jack</span>                         

    <tr>
        <td colspan="100%" class="BodyComment">
            <div id="ctl00_col2_rptComments_ctl01_TheTable" style="padding: 0 0 0 40px;display:none;">                   

                <span id="ctl00_col2_rptComments_ctl01_TextBox1" style="display:inline-block;width:75%; border: thin solid #000000;padding: 4px 4px 4px 4px;">I know it all now!</span>

            </div>                                         

        </td>
    </tr>           
 </tr>  

在页面上有很多这样的行,我想找到标记 chkBox 的所有行,并使用 cleintId='TheTable' 取消隐藏/隐藏 div..

这是我的 javascript 函数的一部分:

  function SelectClick() {

            var TargetBaseControl = document.getElementById("commentsTable");                        
            var Inputs = TargetBaseControl.getElementsByTagName('input');

            for (var n = 0; n < Inputs.length; ++n)
                if (Inputs[n].type == 'checkbox' && Inputs[n].id.indexOf('chkBox', 0) >= 0)

 {

如何找到clientId为'TheTable'的div?

【问题讨论】:

  • 问题的结尾好像不见了。
  • 您是否将所有代码都粘贴到那里,或者缺少什么?
  • 如果你问的是 javascript 函数,那么是的,这是我到目前为止写的,现在我需要找到 div 'TheTable'
  • 我要补充一点,创建一个 id 为“TheTable”的 div 有点误导。 div 不是表格 :)
  • 你没有关闭第二个 TD

标签: asp.net javascript html


【解决方案1】:

不确定它是否与您的问题有关,但如果您需要隐藏 div 的 ID,您可以执行以下操作:

<asp:Panel ID="TheTable" runat="server">...</asp:Panel>

<script...>
... var div = document.getElementById('<%= TheTable.ClientID %>')
</script>

然后你可以用这样的方式隐藏/显示它:

div.style.display = 'none'; // hide
div.style.display = 'block'; // show

复选框的选择似乎与我看到的代码一样。

编辑:好的,第一个解决方案不好。也许在获得复选框控件 chkCtrl (=Inputs[n]) 之后,您可以这样做:

var trCtrl = chkCtrl.parentNode.parentNode; // Should be the parent TR
var divCtrl = trCtrl.getElementsByTagName('div')[0]; // I assume it will always find a div there and that your table is the only div.

请注意,这是未经测试的代码,所以我不能 100% 确定它会起作用。但这是一般的想法。 jQuery基本上做同样的事情,但是为了(非常需要的)方便而很好地包装了它。

我还看到您的示例中有两个嵌入式 TR。这是不正确的,我认为会有一个包含所有 HMTL 标记的 TR。

编辑 2:如果您需要 TR 一个接一个地出现,那么建议的想法将不会直接起作用,因为 div 不会位于第一个 TR 的子项中。您可以做的是获取复选框的父 TR 并获取下一个兄弟(您可以在此处找到一种方法:Hide an element's next sibling with Javascript)。找到兄弟后,您可以在里面搜索 div。

如果您不需要表格 div 作为 ASP 控件(即,如果您可以直接放置一个 div 而不是您使用的 asp:Panel),则可以使用另一种方法。在这种情况下,您可以控制 ID(我假设您使用中继器将项目放在那里):

<div id="theTable<%# Container.ItemIndex %>"...>...</div>

复选框中可以使用相同的值:

Value="<%# Container.ItemIndex %>"...

您可以使用复选框中的值直接获取 div(类似这样):

var div = document.getElementById('theTable' + chkCtrl.value)

【讨论】:

  • document.getElementById('') 会给我与当前复选框相关的 div 吗?有 amny checknoxes 和许多“TheTable” div
  • 不 :(,我误解了,认为会有一个 'TheTable' div。在这种情况下,我会选择 Brandon 的解决方案。
  • 关于第二个 tr,是的,它放错了位置,它应该在第一个 tr 之后而不是在里面。
  • 但是如果我把第二个 tr 放在第一个 tr 下,我会失去一个父母!
【解决方案2】:

您可以轻松地使用 jQuery 来执行此操作。我会在您的复选框和 div 上放置一个独特的类,例如“myCheck”和“myDiv”之类的。

$(".myCheck").each(function () {
  if ($(this).is(":checked")) {
    $(this).parent("tr").find(".myDiv").show();
  } else {
    $(this).parent("tr").find(".myDiv").hide();
  }
});

【讨论】:

  • 好吧,我不懂jQuery,我可以用javascript做这个父子链接吗?
  • 这个 javascript - 你可以加载它并让你访问各种好东西。
  • 是的,您可以使用节点的 parentNode 和 childNodes 属性在纯 JavaScript 中遍历 DOM 树 (howtocreate.co.uk/tutorials/javascript/dombasics)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多