如何获取一个dom元素的绝对位置

如何获取一个dom元素的绝对位置,第1张

难点:目标元素并不一定是absolute的,因此不能简单的通过top,left这种属性获取。元素可能包裹在n个父元素内,需要把这些因素都考虑进去。

解决思路:先获取该元素的offsetLeft和offsetTop,然后取它的offsetParent,并向外循环,累加这些left和top,最后得到的就是元素的绝对位置。

var obj = xxx; //这个元素就是目标元素,你可以用任何方式将它传入。  

  

var w = objoffsetWidth, h = objoffsetHeight;  

  

//从目标元素开始向外遍历,累加top和left值  

for (var t = objoffsetTop, l = objoffsetLeft; obj = objoffsetParent;) {  

        t += objoffsetTop;  

        l += objoffsetLeft;  

}

和wbpack生命周期方法一样, 都是在从生到死的特定阶段调用的方法

PS: 生命周期钩子 = 生命周期函数 = 生命周期事件

    21创建期间的生命周期方法beforeCreate:

        created:

        beforeMount:

        mounted:

    22运行期间的生命周期方法beforeUpdate:

        updated:

    23销毁期间的生命周期方法beforeDestroy:

        destroyed:

1Vue特殊特性Vue特点: 数据驱动界面更新, 无需 *** 作DOM来更新界面

也就是说Vue不推荐我们直接 *** 作DOM, 但是在企业开发中有时候我们确实需要拿到DOM *** 作DOM

那么如果不推荐使用原生的语法获取DOM, 我们应该如何获取DOM

在Vue中如果想要拿到DOM元素我们可以通过ref来获取2ref使用21在需要获取的元素上添加ref属性 例如: <p ref="mypp">我是段落

22在使用的地方通过 this$refsxxx获取, 例如this$refmyppp

3ref特点ref添加到元素DOM上, 拿到的就是元素DOM

ref添加到组件上, 拿到的就是组件

1Vue渲染组件的两种方式

    11先定义注册组件, 然后在Vue实例中当做标签来使用

    12先定义注册组件, 然后通过Vue实例的render方法来渲染

2两种渲染方法的区别

    11当做标签来渲染, 不会覆盖Vue实例控制区域

    12通过render方法来渲染, 会覆盖Vue实例控制区域

感谢您的提问。根据您的问题,我了解到您想了解如何在el-button组件中添加原生方法。以下是我为您提供的解答:

在el-button组件中添加原生方法的方法与在普通HTML元素中添加原生方法类似。可以通过获取el-button组件的DOM元素,然后在其上添加事件监听器的方式来实现。具体步骤如下:

1 使用ref属性获取el-button组件的DOM元素,例如:

```

<el-button ref="myButton">按钮</el-button>

```

2 在Vue组件的mounted生命周期函数中获取DOM元素,并为其添加事件监听器,例如:

```

mounted() {

const buttonElement = this$refsmyButton$el; // 获取DOM元素

buttonElementaddEventListener('click', thishandleClick); // 添加事件监听器

},

methods: {

handleClick() {

// 在这里编写原生方法的代码逻辑

}

}

```

3 在Vue组件的beforeDestroy生命周期函数中移除事件监听器,以避免内存泄漏,例如:

```

beforeDestroy() {

const buttonElement = this$refsmyButton$el; // 获取DOM元素

buttonElementremoveEventListener('click', thishandleClick); // 移除事件监听器

}

```

以上就是在el-button组件中添加原生方法的方法。需要注意的是,在添加事件监听器时,需要使用addEventListener方法,并指定事件类型和事件处理函数。在移除事件监听器时,需要使用removeEventListener方法,并指定相同的事件类型和事件处理函数。希望我的回答能够对您有所帮助,如有其他问题,请随时向我提问。

jQuery手册中这样写道:

$(expression, [context])

expression String 用来查找的字符串

context (可选) Element, jQuery 作为待查找的 DOM 元素集、文档或 jQuery 对象。

那么,你可以这样获取:

$('img:first-child', this)attr('src');

--------------------------------------

或者用原生js:

var a = documentgetElementById('my')getElementsByTagName('a');

var src = [];

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

srcpush(a[i]getElementsByTagName('img')[0]src);

}

ref :被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的 $refs 对象上。如果在普通的DOM元素上使用,那么指向的就是普通的DOM元素。

Vue特点: 数据驱动界面更新, 无需 *** 作DOM来更新界面

也就是说Vue不推荐我们直接 *** 作DOM, 但是在开发中有时候我们确实需要拿到DOM *** 作DOM

那么如果不推荐使用原生的语法获取DOM, 我们应该如何获取DOM

在Vue中如果想要拿到DOM元素我们可以通过ref来获取

例如: <p ref="myP">我是段落</p>

例如 this$refmyP

refs : 一个对象,持有注册过 ref 特性 的所有 DOM 元素和组件实例

注意: refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这只意味着一个直接的子组件封装的“逃生舱”——你应该避免在模板或计算属性中访问 $refs 结语

在讲ref特点之前我们先来回顾, 原生语法获取元素的特点

例如: 通过原生的语法 documentquerySelector 获取到的都是被渲染之后DOM元素, 也就是原生的元素

在Vue中如果想获取原生的元素或者获取自定义的组件, 可以通过ref来获取

拿到了组件后, 还可以访问组件中的数据

1获取元素内的文本例如:有标签<strong,取<strong的文本内容:非mozilla浏览器:strongeleminnertext其它浏览器:strongelemfirstchildnodevalue;还有一个通用的函数:function text(e){var t="";e = echildnodes || e;for(var j=0;j<elength;j++){t += e[j]nodetype != 1 e[j]nodevalue : text(e[j]childnodes);}return t;}2获取元素内的html所有现代浏览器,都实现了html dom 元素的一个额外属性:innerhtml使用这个属性就可以从一个元素中提取所有的html和文本了。如果元素内,只有文本,可以替换上面的方法;如果含有子元素,则提取所有子元素和文本。3 *** 作元素特性获取和设置特性的值,常用的可以使用getattribute和setattributeHTML DOM文档还有作为快速特性获取器(getter)/设置器(setter)的额外属性集合,比如:elementid="main",elementvalue="123",作者有个更通用的方法,来获取和设置,写得很好,可以看看81页。下面是总结的一些在DOM中常用的方法:/根据id获得元素/function id(name){return documentgetElementById(name);}/有elem参数,是查找elem下的节点名;如果没有elem,则查找整个文档/function tag(name,elem){return (elem || document)getElementsByTagName(name);}/找出全部有指定类值的元素/function hasclass(name,type){var r=[];var re=new RegExp("(^|//s)" + name + "(//s|$)");var e = documentgetElementsByTagName(type || "");for(var j=0;j<elength;j++)if(retest(e[j])) rpush(e[j]);return r;}/获取元素文本内容的通用函数/function text(e){var t = "";e= echildNodes || e;for(var j=0;j<elength;j++){

代码如下:

这细微的差别就会影响到程序的结果。

代码如下:

这些颜色不仅作用于那些直接包含在<body>标签里的内容,还将作用于嵌套在body元素内的所有元素。

id属性就像一个挂钩,它一头连着文档里的某个元素,另一头连着CSS样式表里的某个样式。

documentgetElementById("purchases")这个调用将返回一个对象,这个对象对应着document对象里的一个独一无二的元素,那个元素的的id属性值为purchases。其实,文档中的每个元素都是一个对象。利用DOM提供的方法能够得到任何一个对象。getElementsByTagName返回一个数组,即使整个文档里只有一个元素,也返回一个数组。

示例:

显示信息都是object,getElementByClassName也返回一个具有相同类名的元素数组,获取和设置属性getAttribute objectgetAttribute(attribute)。

注:getAttribute方法不属于document对象,它只能通过元素节点对象调用。

例子:

以上就是关于如何获取一个dom元素的绝对位置全部的内容,包括:如何获取一个dom元素的绝对位置、Vue生命周期方法、el-button添加原生方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存