Q实现类似getElementsByClassName的功能
实现一个函数,查找某个DOM节点下面的包含某个class的所有DOM节点,不允许使用原生的getElementsByClassName
querySelectorAll等原生提供DOM查找函数。
function queryClassName(node, name) {
var starts = '(^|[ \n\r\t\f])',
ends = '([\n\r\t\f]|$)';
var array = [],
regex = new RegExp(starts + name + ends),
elements = node.getElementsByTagName("*"),
length = elements.length,
i = 0,
element;
while (i < length) {
element = element[i];
if(regex.test(element.className)) {
array.push(element);
}
i += 1;
}
return array;
}
方式2:
function getAllClassName(attr) {
let arr = [];
let doms = document.getElementsByTagName("*");
for(var i = 0; i < doms.length; i ++) {
if(doms[i].className == attr || doms[i].className.indexof(attr + " ") != -1 || doms[i].className.indexOf(" " +attr+ " ") != -1) {
arr.push(doms[i])
}
return arr;
}
var classNames = getAllClass('ykactive');
for(let i = 0; i < classNames.length; i ++) {
classNames[i].style.background= 'orange'
}
}
Qjs实现查找树
相关知识点
1节点: 树中的每个元素称为一个节点
2根节点:位于整棵树顶点的节点,它没有父节点。
3子节点:其他节点的后代
4叶子节点:没有子节点的元素成为叶子节点
5二叉树:二叉树就是一种数据结构,它的组织关系就像自然界的树一样。官方的定义为:是一个有限元素的集合。该集合或者为空,或者由一个称为根的元素,及两个不相交的,被分别称为左子树和右子树的二叉树组成。
6二叉查找树:二叉查找树也叫二叉搜索树(BST),它只允许我们在左节点存储比父节点更小的值,右节点存储比父节点更大的值,上图展示的就是一颗二叉查找树。
1.首先创建一个类,表示二叉查找树。
function BinarySearchTree() {
var Node = function(key) {
this.key = key;
this.left = null;
this.right = null
}
var root = null
}
#向树中插入一个键
向树中插入一个新的键,首页应该创建一个用来表示新节点的Node类实例,因此需要new一下Node类并传入需要插入的key值,它会自动初始化为左右节点为null的一个新节点
然后,需要做一些判断先判断树是否为空,若为空,新插入的节点就作为根节点,如不为空,调用一个辅助方法insertNode()方法,将根节点和新节点传入
this.insert = function (key) {
let newNode = new Node(key);
if(root === null) {
root = newNode
} else {
insertNode(root, newNode)
}
}
定义一下insertNode() 方法,这个方法会通过递归得调用自身,来找到新添加节点的合适位置
let insertNode = function(node, newNode) {
if(newNode.key <= node.key) {
if(node.left === null) {
node.left = newNode
} else {
insertNode(node.left,newNode)
}
} else {
if(node.right === null) {
node.right = newNode
} else {
insertNode(node.right, newNode)
}
}
}
未完待续。。。
扫码可以领10g前端资料,也可回复加群,加入交流群。
另有github每日更新精选面试题欢迎star github.com/qdleader/qd…