前端基础12:递归调用,快速排序和简单DOM元素操作

博客介绍了递归调用,需在方法内return调用自身并设置边界条件;快速排序思路是取中间项比较后合并。还给出string案例,介绍格式化url问号传参方法。此外,详细讲解了DOM部分,包括节点类型、节点间关系属性、获取DOM元素方式及设置自定义属性方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归调用

  • 递归调用,方法自己调用自己(重复执行方法中的逻辑)
    • 1.在方法内部调用自己的方法写在return
    • 2.设置边界条件,让递归调用停下来
    function fn(n) {
        if(n == 1){
            return 1;
        }
        return n + fn(n-1);
    }
    console.log(fn(100));//5050
复制代码
    function fn(n) {
        if(n === 1){
            return 1;
        }
        if(n%2 === 1){
            return n * fn(n - 2);
        }else if(n%2 === 0){
            return fn(n - 1);
        }
    }
    console.log(fn(10));//945
复制代码

快速排序

  • 思路:先取出数组的中间项,将数组的其他项和中间项比较,若比中间项小则放在左手边,若比中间项大则放在右手边。左手和右手边再重复上述操作,最后将所有的数合并在一起。
    var a = [1,7,4,5,8,3,77,45,86,93,34,52];
    //先获取中间项索引
    function quickSort(n) {
        //处理边界
        if(n.length <= 1){
            return n;
        }
        var pointIndex = Math.floor(n.length/2);
        //通过中间索引,把中间项从数组中删除
        var pointView = n.splice(pointIndex,1)[0];
        var left = [];//左手边
        var right = [];//右手边
        for(var i = 0; i < n.length; i++){
            if(n[i] <= pointView){
                left.push(n[i]);
            }else{
                right.push(n[i]);
            }
        }
        return quickSort(left).concat(pointView,quickSort(right));
    }
    console.log(quickSort(a));//[1, 3, 4, 5, 7, 8, 34, 45, 52, 77, 86, 93]
复制代码

string案例1

  • 如何格式化url地址中问号传参(qreryString)部分?
    • 1.先拿到?的索引
    • 2.拿到?后的参数部分str
    • 3.将字符串按照&拆分成数组的每一项
    • 4.将ary数组中每一项再按照=拆分成数组的每一项
    • 5.把数组ary1和ary2中的第一项作为属性名,第二项作为对象的属性值
    var url = "https://www.twitch.tv?name=tw&age=8";
    function queryUrl(url) {
        var obj = {};
        var index = url.indexOf("?");//拿到?的索引
        var str = url.slice(index + 1);//截取?后的部分
        var ary = str.split("&");
        for(var i = 0; i < ary.length; i++){
            var cur = ary[i];
            var arr = cur.split("=");
            obj[arr[0]] = arr[1];
        }
        return obj;
    }
    console.log(queryUrl(url));
复制代码

DOM部分

  • 浏览器渲染时,页面上的内容会渲染成有层次结构的节点,一个页面只有一个根节点document,根节点下根元素只有一个,就是HTML标签
  • 文档 -> 文档节点
  • 文本 -> 文本节点
  • 注释 -> 注释节点
  • 标签 -> 元素节点
节点nodeName(节点名称)nodeType(节点类型)nodeValue(节点内容)
文档节点#document9null
文本节点#text3文本的内容(包括换行)
注释节点#comment8注释的内容
元素节点大写的标记名1null

DOM节点间相互关系的属性

  • 1.childNodes 所有的子节点(文本节点,元素节点,注释节点)
  • 2.children 所有的子元素
  • 3.firstChild 第一个子节点
  • 4.firstElementChild 第一个子元素节点 (ie6~ie8不支持)
  • 5.lastChild 最后一个子节点
  • 6.lastElementChild 最后一个子元素节点
  • 7.nextSibling 相邻弟弟节点
  • 8.nextElementSibling 相邻弟弟元素节点
  • 9.previousSibling 相邻哥哥节点
  • 10.previousElementSibling 相邻的哥哥元素节点
  • 11.parentNode 父元素节点

获取DOM元素

  • ID名 document.getElementById("ID名")
  • 标记名context.getElementsByTagName("标签名")
  • 类名context.getElementsByClassName("类名")
  • name属性 在标准浏览器对所有元素起作用,在IE浏览器下只对表单元素起作用
    • context.getElementsByName("")
  • 选择器 document.querySelectorAll() 获得一组元素 移动端常用 - document.querySelector() 获得一个元素 移动端常用
  • 设置DOM元素的自定义属性:
    • ele.setAttribute(key,value);
    • ele.getAttribute();

转载于:https://juejin.im/post/5b8683016fb9a019fe685949

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值