js中的dom操作
在jquery中将dom结构转换成字符串
js
……
// dom转字符串
domToStr() {
if(!document.HTMLDOMtoString){
document.HTMLDOMtoString = function(HTMLDOM){
const div = document.createElement("div")
div.appendChild(HTMLDOM)
return div.innerHTML
}
}
},
// dom转字符串用例
domToStrExam(dom) {
let src = document.HTMLDOMtoString(dom);
src.replace("<","<");
src.replace(">",">");
return src;
},
……
utilTip.domToStr(); // dom转字符串
console.log(utilTip.domToStrExam(e.toElement)); // dom转字符串用例
// 或者
function domToString (node) {
let tmpNode = document.createElement('div')
tmpNode.appendChild(node)
let str = tmpNode.innerHTML
tmpNode = node = null; // 解除引用,以便于垃圾回收
return str;
}
……
// dom转字符串
domToStr() {
if(!document.HTMLDOMtoString){
document.HTMLDOMtoString = function(HTMLDOM){
const div = document.createElement("div")
div.appendChild(HTMLDOM)
return div.innerHTML
}
}
},
// dom转字符串用例
domToStrExam(dom) {
let src = document.HTMLDOMtoString(dom);
src.replace("<","<");
src.replace(">",">");
return src;
},
……
utilTip.domToStr(); // dom转字符串
console.log(utilTip.domToStrExam(e.toElement)); // dom转字符串用例
// 或者
function domToString (node) {
let tmpNode = document.createElement('div')
tmpNode.appendChild(node)
let str = tmpNode.innerHTML
tmpNode = node = null; // 解除引用,以便于垃圾回收
return str;
}
class绑定
html
<li :class="[resdata.budget<resdata.l_budget ? 'jt_top' : 'jt_down']"><b>预计投入资金:</b><span>{{ resdata.budget }}万元</span></li>
<li :class="[resdata.budget<resdata.l_budget ? 'jt_top' : 'jt_down']"><b>预计投入资金:</b><span>{{ resdata.budget }}万元</span></li>
根据事件对象获取dom
js
// 跳转表格 - 使用事件代理
linkTable(e) {
let { target } = e
let { textContent } = target
let { nodeName } = target
// console.log(target)
// console.log("dom名", target.nodeName)
let levelTxt1 = ''
let leve1Txt2 = ''
/**
* 提取值
* 点击不同位置做区分
*/
// 点击li - 区分左右
if(nodeName === 'LI') {
levelTxt1 = target.parentNode.parentNode.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
// 如果没有类
if(target.classList.length !== 0) {
leve1Txt2 = textContent
} else {
leve1Txt2 = target.parentNode.getElementsByTagName('li')[0].textContent
}
} else {
// 点击外层
leve1Txt2 = target.getElementsByTagName('li')[0].textContent
}
// 点击ul
if(nodeName === 'UL') {
levelTxt1 = target.parentNode.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
}
// 点击dd
if(nodeName === 'DD') {
levelTxt1 = target.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
}
// 处理跳转数据
this.resolveLinkData(levelTxt1, leve1Txt2)
},
// 跳转表格 - 使用事件代理
linkTable(e) {
let { target } = e
let { textContent } = target
let { nodeName } = target
// console.log(target)
// console.log("dom名", target.nodeName)
let levelTxt1 = ''
let leve1Txt2 = ''
/**
* 提取值
* 点击不同位置做区分
*/
// 点击li - 区分左右
if(nodeName === 'LI') {
levelTxt1 = target.parentNode.parentNode.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
// 如果没有类
if(target.classList.length !== 0) {
leve1Txt2 = textContent
} else {
leve1Txt2 = target.parentNode.getElementsByTagName('li')[0].textContent
}
} else {
// 点击外层
leve1Txt2 = target.getElementsByTagName('li')[0].textContent
}
// 点击ul
if(nodeName === 'UL') {
levelTxt1 = target.parentNode.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
}
// 点击dd
if(nodeName === 'DD') {
levelTxt1 = target.parentNode.parentNode.previousSibling.getElementsByTagName('ul')[0].getElementsByClassName('font_bold')[0].textContent
}
// 处理跳转数据
this.resolveLinkData(levelTxt1, leve1Txt2)
},
dom节点操作
js
getButtonList(next) {
this.$nextTick(()=> {
let buttonList = document.querySelector('.el-tabs__content').getElementsByTagName('button')
buttonList.forEach(item=> {
// console.log(item.innerText)
next(item)
})
})
},
this.getButtonList(item=> {
if(item.innerText === '草稿') {
item.classList.add('factivity')
}
})
// 移除所有指定class
this.getButtonList(item=> {
item.classList.remove('factivity')
})
getButtonList(next) {
this.$nextTick(()=> {
let buttonList = document.querySelector('.el-tabs__content').getElementsByTagName('button')
buttonList.forEach(item=> {
// console.log(item.innerText)
next(item)
})
})
},
this.getButtonList(item=> {
if(item.innerText === '草稿') {
item.classList.add('factivity')
}
})
// 移除所有指定class
this.getButtonList(item=> {
item.classList.remove('factivity')
})
标签多选
js
setTagStatus(e) {
let { target } = e
let { textContent } = target
target.classList.toggle('active') // 选中效果
let activeFlag = target.classList.contains('active') // 判断是否选中 (选中:true)
// console.log(activeFlag, textContent)
/**
* 0:未选中,1:选中 selected
* 点击,根据当前textContent匹配数组项,根据activeFlag修改selected字段
* 根据当前项修改数组中对应项
*/
// console.log("tagList", this.tagList)
this.tagList.forEach(item=> {
// 根据当前点击项匹配数组中对应的对象
if(item.brandLabel === textContent) {
// console.log("数组项", item) // 数组项
// true 选中 1 => selected=1
if(activeFlag) {
item.selected = '1'
} else {
item.selected = '0'
}
}
})
},
// 确认标签
tagSubmit() {
// console.log("确认标签")
// console.log("tagList", this.tagList)
let idStr = ""
// 遍历标签列表,摘选出所有选中标签 selected=1
this.tagList.forEach(item=> {
if(item.selected === '1') {
idStr += item.id + ','
}
})
// 删除末尾逗号
idStr = idStr.substr(0, idStr.length-1)
console.log(idStr)
}
setTagStatus(e) {
let { target } = e
let { textContent } = target
target.classList.toggle('active') // 选中效果
let activeFlag = target.classList.contains('active') // 判断是否选中 (选中:true)
// console.log(activeFlag, textContent)
/**
* 0:未选中,1:选中 selected
* 点击,根据当前textContent匹配数组项,根据activeFlag修改selected字段
* 根据当前项修改数组中对应项
*/
// console.log("tagList", this.tagList)
this.tagList.forEach(item=> {
// 根据当前点击项匹配数组中对应的对象
if(item.brandLabel === textContent) {
// console.log("数组项", item) // 数组项
// true 选中 1 => selected=1
if(activeFlag) {
item.selected = '1'
} else {
item.selected = '0'
}
}
})
},
// 确认标签
tagSubmit() {
// console.log("确认标签")
// console.log("tagList", this.tagList)
let idStr = ""
// 遍历标签列表,摘选出所有选中标签 selected=1
this.tagList.forEach(item=> {
if(item.selected === '1') {
idStr += item.id + ','
}
})
// 删除末尾逗号
idStr = idStr.substr(0, idStr.length-1)
console.log(idStr)
}
滚动条自动滚动
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>autoScroll</title>
</head>
<style>
.parent {
width: 300px;
height: 200px;
margin: 0 auto;
background: #242424;
overflow-y: scroll;
}
/*设置的子盒子高度大于父盒子,产生溢出效果*/
.child {
height: auto;
}
.child li {
height: 50px;
margin: 2px 0;
background: #009678;
}
</style>
<body>
<div id="parent" class="parent">
<div id="child1" class="child">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</div>
<div id="child2" class="child"></div>
</div>
<script type="text/javascript">
(function () {
var parent = document.getElementById('parent');
var child1 = document.getElementById('child1');
var child2 = document.getElementById('child2');
child2.innerHTML = child1.innerHTML;
setInterval(function () {
if(parent.scrollTop >= child1.scrollHeight) {
parent.scrollTop = 0;
} else {
parent.scrollTop++;
}
}, 20);
})()
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>autoScroll</title>
</head>
<style>
.parent {
width: 300px;
height: 200px;
margin: 0 auto;
background: #242424;
overflow-y: scroll;
}
/*设置的子盒子高度大于父盒子,产生溢出效果*/
.child {
height: auto;
}
.child li {
height: 50px;
margin: 2px 0;
background: #009678;
}
</style>
<body>
<div id="parent" class="parent">
<div id="child1" class="child">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</div>
<div id="child2" class="child"></div>
</div>
<script type="text/javascript">
(function () {
var parent = document.getElementById('parent');
var child1 = document.getElementById('child1');
var child2 = document.getElementById('child2');
child2.innerHTML = child1.innerHTML;
setInterval(function () {
if(parent.scrollTop >= child1.scrollHeight) {
parent.scrollTop = 0;
} else {
parent.scrollTop++;
}
}, 20);
})()
</script>
</body>
</html>
通过class设置锚点
js
export const setSmoothScroll = target=> {
let appDom = document.querySelector('#app')
appDom.scrollTop = 50; // 初始值 - 否则会有bug
target = target?target:'aaa'; // className
const targetDom = document.querySelector('.' + target); // 目标节点class
let targetHeight = targetDom.getBoundingClientRect().top - 130 // dom距离顶部距离
appDom.scrollTop = targetHeight
let startTime = +new Date();
let duration = 800; //ms
const run = ()=> {
let time = +new Date() - startTime;
appDom.scrollTo(0, targetHeight * (time / duration));
run.timer = requestAnimationFrame(run);
if (time >= duration) {
appDom.scrollTo(0, targetHeight);
cancelAnimationFrame(run.timer);
}
}
requestAnimationFrame(run);
}
export const setSmoothScroll = target=> {
let appDom = document.querySelector('#app')
appDom.scrollTop = 50; // 初始值 - 否则会有bug
target = target?target:'aaa'; // className
const targetDom = document.querySelector('.' + target); // 目标节点class
let targetHeight = targetDom.getBoundingClientRect().top - 130 // dom距离顶部距离
appDom.scrollTop = targetHeight
let startTime = +new Date();
let duration = 800; //ms
const run = ()=> {
let time = +new Date() - startTime;
appDom.scrollTo(0, targetHeight * (time / duration));
run.timer = requestAnimationFrame(run);
if (time >= duration) {
appDom.scrollTo(0, targetHeight);
cancelAnimationFrame(run.timer);
}
}
requestAnimationFrame(run);
}
通过class设置锚点2
js
export const setSmoothScroll = target=> {
const scrollBox = document.querySelector('#app')
let distance = scrollBox.scrollTop
const curTag = document.querySelector('.' + target) // 节点tag
const offsetTop = curTag.offsetTop - 120 // 滚动距离
let step = offsetTop / 50
if (offsetTop > distance) {
smoothDown()
} else {
const newTotal = distance - offsetTop
step = newTotal / 50
smoothUp()
}
scrollBox.scrollTop = offsetTop
function smoothDown() {
if (distance < offsetTop) {
distance += step
scrollBox.scrollTop = distance
setTimeout(smoothDown, 10)
} else {
scrollBox.scrollTop = offsetTop
}
}
function smoothUp() {
if (distance > offsetTop) {
distance -= step
scrollBox.scrollTop = distance
setTimeout(smoothUp, 10)
} else {
scrollBox.scrollTop = offsetTop
}
}
}
export const setSmoothScroll = target=> {
const scrollBox = document.querySelector('#app')
let distance = scrollBox.scrollTop
const curTag = document.querySelector('.' + target) // 节点tag
const offsetTop = curTag.offsetTop - 120 // 滚动距离
let step = offsetTop / 50
if (offsetTop > distance) {
smoothDown()
} else {
const newTotal = distance - offsetTop
step = newTotal / 50
smoothUp()
}
scrollBox.scrollTop = offsetTop
function smoothDown() {
if (distance < offsetTop) {
distance += step
scrollBox.scrollTop = distance
setTimeout(smoothDown, 10)
} else {
scrollBox.scrollTop = offsetTop
}
}
function smoothUp() {
if (distance > offsetTop) {
distance -= step
scrollBox.scrollTop = distance
setTimeout(smoothUp, 10)
} else {
scrollBox.scrollTop = offsetTop
}
}
}
判断是否包含某个class
js
this.$el.parentNode.querySelectorAll(calss).forEach(item=> {
if(!item.classList.contains(dnCls)) {
item.classList.add(dnCls)
} else {
item.classList.remove(dnCls)
}
})
this.$el.parentNode.querySelectorAll(calss).forEach(item=> {
if(!item.classList.contains(dnCls)) {
item.classList.add(dnCls)
} else {
item.classList.remove(dnCls)
}
})
批量删除dom
js
let flickerPointDom = document.querySelectorAll('.flicker_point')
flickerPointDom.forEach(item => {
item.classList.remove('flicker_point')
})
let flickerPointDom = document.querySelectorAll('.flicker_point')
flickerPointDom.forEach(item => {
item.classList.remove('flicker_point')
})