Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过jquery获取父对象的类型_Jquery_Parent - Fatal编程技术网

如何通过jquery获取父对象的类型

如何通过jquery获取父对象的类型,jquery,parent,Jquery,Parent,如果用户单击按钮(类为button),那么通过jquery知道父元素类型的方法是什么? 让我们看看布局: <table> <tr><td>Menu</td></tr> <tr><td>Submenu of the page</td><td> <form action=""> <input type="text" name="fullname" value="" /&g

如果用户单击按钮(类为button),那么通过jquery知道父元素类型的方法是什么? 让我们看看布局:

<table>
<tr><td>Menu</td></tr>
<tr><td>Submenu of the page</td><td>
<form action="">
  <input type="text" name="fullname" value="" />
  <input type="password" name="password" value="" />
  <input type="submit" class="button" value="Submit" />
</form>

<table>
   <thead><tr><th>Name</th><th>Password</th><th>Action</th></tr></thead>
   <tbody>
          <tr><td>Mr.X</td><td>1234</td><td><input type="button" class="button" value="check" /></td></tr>
          <tr><td>Mr.Y</td><td>1234</td><td><input type="button" class="button" value="check" /></td></tr>
          <tr><td>Mr.Z</td><td>4567</td><td><input type="button" class="button" value="check" /></td></tr>
   </tbody>
</table>
<div>
this is some text and the below button check whether it is div<br />
<input type="button" class="button" value="check" />
</div>
</td>
</tr>
</table>

菜单
页面的子菜单
NamePasswordAction
X1234先生
Y1234先生
Z4567先生
这是一些文本,下面的按钮检查它是否为div
现在,如果用户单击表单的
Submit
按钮或表的
check
按钮,jquery代码必须确定父项是表单还是表,或者它是什么。我必须根据父级的类型采取一些操作(即:如果类型是form,则serializeArray(),或者如果form的类型是table,则在获取回调数据后,tr将被更新..等等)。这里的
parent'并不表示DOM的直接父级,而是表示
.button`类的最高部分

如何获取父项是窗体、表还是div等?

您可以使用
$(this).parent().prop(“标记名”)
获取标记名。我已经为此创造了。请检查。

使用
最近的()

您的声明“此处父项[…]表示
.button
类的最高部分”不清楚。我猜您指的是位于顶部
元素的
元素中的最高祖先元素。让我们称之为“container”元素。目前,您可以使用以下方法获取该元素:

var $container = $('body>table>tbody>tr:last>td:last');
(注意:如果上面有
id
class
的话,会容易得多。)

现在,您可以使用以下方法获取单击按钮的“父”元素的类型:

$(".button").click(function() {
    var parentType = $(this).parentsUntil($container).last().prop('nodeName');
    alert(parentType);
});

在单击事件中,
$(this).parent().prop('nodeName')
为什么不在按钮上放置不同的类,并相应地分配不同的单击事件处理程序?不,它不起作用。它返回
td
,因为表单或表格是另一个
td
表格的一部分。我已经更新了布局。请检查布局。使用
.closest()
。请看下面我的答案。您所说的“此处父项[…]表示
.button
类的最高部分”是什么意思?在示例代码中,所有
.button
元素最终都位于
元素中。不,它不起作用。它返回
td
,因为表单或表格是另一个
td
表格的一部分。我已经更新了布局。请检查布局。为什么投否决票?这正是OPNo中所要求的,不是,我不想把它的范围局限于表格,也可能是段落或div。所以类型应该是动态的。它应该返回类型的标记名。@AbdullahMamun Ur Rashid“我不把它的作用域限制在表或表单上,它也可以是段落或div。因此类型应该是动态的。它应该返回类型的标记名。”是否可以在问题中包含此详细信息?您使用的术语不一致
parent
是一个特定的术语,表示元素的直接祖先。如果您试图确定单击的元素是否在表单中,则此代码将执行此操作。如果你有其他的需求,请详细说明。不管怎样,让一个函数处理这样不同的情况可能是一个糟糕的设计选择。将不同的类名或数据属性添加到您希望以不同方式操作的“按钮”中,并为这些按钮添加单独的事件处理程序。
$('.button[data-button-type]').on('click', function() {
    var buttonType = $(this).attr('data-button-type');
    if (buttonType === 'form') { /* Handle form buttons */ }
    else if (buttonType === 'table') { /* Handle table buttons */ }
    else if (buttonType === 'div') { /* Handle div buttons */ }
});
var $container = $('body>table>tbody>tr:last>td:last');
$(".button").click(function() {
    var parentType = $(this).parentsUntil($container).last().prop('nodeName');
    alert(parentType);
});