JavaScript如何获取按钮所在的div元素

JavaScript如何获取按钮所在的div元素,第1张

这要分两种情况:

1、按钮在div中。

我们可以通过:

var btn = documentgetElementById("btn");//获取按钮节点

var div = btnparentNode;//获取di元素,当然不一定div就是按钮的父元素,可以通过parentNode向上查找,最好还是给div加一个id2、按钮不在div中

我们可以通过:

//以上这种情况最好给div加一个id,通过以下方式获得

var div = documentgetElementById("div")

//如果不想加的话,以下方式

var divs = documentgetElementsByTagName("DIV");

var div = divsitem(n);//n表示要取的div,从0开始

之所以会造成卡顿,是因为该组件是一次性将所有数据全部渲染,dom数量过于庞大,并且在展开树 *** 作的时候,用了大量递归循环语句,性能受到严重影响,造成卡顿。

我想到的解决方式有两种:

一:分页,让后端添加分页查询,以节点数统计数据条数进行展示。(但实际需求中较少,一般树形表格都是不分页)。

二:将请求到的树形数组数据备份(tableDataCopy),初始化仅仅展示指定层级(如第一层树)的数据,将第一层下面的所有的children全部置为null,并记录存在children的节点,设置hasChild的状态,判断是否存在子节点。这样就不会在初始化页面时展示完所有数据,实现按需加载。

        以上仅仅能满足展示功能,当存在 *** 作节点上移下移/删除/编辑等 *** 作的情况下,展示的节点就不能同步刷新(因为备份数据不能双向数据绑定了)。处理办法:更新节点(两种方式,第一种使用render()来实现,第二种是给表格绑定key(利用diff算法),只要 *** 作了数据,就改变key就能实现节点更新)。

请求数据和展开代码如下:

// 获取树形列表

getList(active) {

thisloading = true;

let data = Objectassign({}, thissearchForm);

APIgetDepartmentListAll(data)

then((res) => {

// thistableData = resdata;

thisexpandRowpush(resdata[0]id); //默认展开

thistableDataCopy = resdata || [] // 备份的全量数据

if (active) { //是否是 *** 作按钮点击的数据

thistableData = thiscommonJsmapNewTableData(resdata,thisexpandRow); //展开已展开的数据

} else {

thistableData = thiscommonJsmapNewTableData(resdata,resdata[0]id); //默认展开第一层

}

thiscomponentKey += 1; //销毁更新dom

})finally(() => {

thisloading = false;

thisgetTableHeight();

})

},

// 展开按钮

getChildrens(tree, treeNode, resolve) {

let data = Objectassign({}, thissearchForm, {

deptId: treeid

});

APIgetDepartmentListAll(data) //传入展开按钮层级节点的id,获取子节点

then((res) => {

thistableDatas = JSONparse(JSONstringify(resdatachildren))map(item => { // 展示数据

// hasChildren 表示需要展示一个箭头图标

itemhasChildren = itemchildren && itemchildrenlength > 0

// 只展示一层也可以配置tree-props里面的children为其他字段

itemchildren = null

// 记住层级关系

itemidList = [itemid]

return item

})

resolve(thistableDatas)

})

},

登录后复制

当存在 *** 作按钮,数据更新后,利用上述key更新节点后 ,会将展开的状态初始为初次进度页面的状态,不能停留在 *** 作的节点。解决方法:可以在点击 *** 作按钮的时候,使用findParentNode方法递归查询到该节点所有的祖先节点id并记录(expandRow,该变量也是树形表格:expand-row-keys默认展开的数据),然后再请求刷新数据时,通过mapNewTableData()方法递归处理将对应的祖先节点id对应的children给展示处理,其他的节点还是一样的置为null。代码如下:

/

@param 递归,当前节点的祖先节点id数组(包含自身)

acceptUnitNodes树状结构数据,ids当前节点的id

/

findParentNode(acceptUnitNodes, ids) {

var parentNodes = [] // 所有父节点

var forfun = function(id, nodes) {

for (var i = 0; i < nodeslength; i++) {

var currentNode = nodes[i]

if (currentNodeid === id) {

return currentNodeid

} else if (currentNodechildren) {

var validNodeId = forfun(id, currentNodechildren)

if (validNodeId && parentNodesindexOf(validNodeId) < 0) {

parentNodespush(validNodeId)

}

if (validNodeId) {

return currentNodeid

}

}

}

}

var validNodeId = forfun(ids, acceptUnitNodes)

if (validNodeId && parentNodesindexOf(validNodeId) < 0) {

parentNodespush(validNodeId)

}

return parentNodes

},

//递归处理数据,当有展开记录的时候,将有展开记录的数据的子节点显示出来

mapNewTableData(data, pidArr) {

let dataNew = JSONparse(JSONstringify(data));

function mapNewArr(dataNew, pidArr) {

dataNewmap(item => {

if (pidArrindexOf(itemid) === -1) {

itemidList = [itemid]

itemhasChildren = true

itemchildren = null

// 记住层级关系

return item;

} else {

mapNewArr(itemchildren, pidArr)

}

})

return dataNew;

}

mapNewArr(dataNew, pidArr);

return mapNewArr(dataNew, pidArr);;

},

登录后复制

*** 作按钮:

//上移//下移

upDownLayer(index, row, type) {

thisexpandRow = (thiscommonJsfindParentNode(thistableDataCopy, rowid))splice(1); //调工具,获取点击当前节点的祖先节点id数组。

let loading = Loadingservice({

target: documentquerySelector("tableBox"),

});

你的意思是点击Button删除表格的一行信息!

首先在方法开始的时候获得整个表格的dom信息

然后在用this传值到方法中获得当前行的信息

最后用获取到的表格deleterow(获取到的行的值);

参考代码:

function Remove(fontobj){

var obj=$('#myTable');

var n=fontobjparentNodeparentNodeparentNoderowIndex;

objdeleteRow(n);

}

您可以使用 ElementparentNode 属性来获取元素的父级。

您还可以将它们串在一起以提升几个级别。

您可以使用 Elementclosest() 方法获取与选择器匹配的 DOM 树上最近的父级。

Elementclosest() 方法从元素本身开始。您可以通过将第一个父元素与 NodeparentNode 属性配对来开始。

可能最常用的是使用 Elementclosest() 方法来检查元素是否在某个父元素中。

它与事件侦听器的事件委托配合时特别有用。

例如,假设您有一些按钮,其中包含一些嵌套的 HTML,如下所示。

你的 JavaScript 监听这些按钮的点击看起来像这样。

这将永远不会运行,因为点击事件的目标几乎总是 text-large 或 text-small 元素。仅当您单击按钮中的文本之外时才有效。

为了解决这个问题,我们可以使用 Elementclosest() 方法。

Elementclosest() 方法有很多用途 ,这只是其中之一。

使用 closest 和 matches 方法来检测元素是否存在某选择器

你好,出现这个问题是复制方式不对的。

如果直接复制html代码(你图上的<html></html>这些就属于Html代码),需要在源代码模式下复制。

具体 *** 作:点 百度编辑器上的第一个按钮html,然后再复制代码。下图的红色部分。

复制完后,再次点一下html按钮,就是所见即所得的内容。

当然你可以在源码模式下直接提交内容。

以上就是关于JavaScript如何获取按钮所在的div元素全部的内容,包括:JavaScript如何获取按钮所在的div元素、elementui表格更新卡住、javascript中,已知一个button的ID,找这个button的父节点的父节点找不到。好心人帮下忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9312846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存