吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1129|回复: 7
收起左侧

[讨论] 求javascript大佬解释代码

[复制链接]
追风筝的哈桑 发表于 2022-7-9 11:55
想知道以下代码什么意思,万分感谢!
jQuery.fn.getPath = function () {
  if (this.length != 1) throw 'Requires one element.';

  var path, node = this;
  while (node.length) {
      var realNode = node[0], name = realNode.name;
      if (!name) break;
      name = name.toLowerCase();

      var parent = node.parent();

      var siblings = parent.children(name);
      if (siblings.length > 1) {
          name += ':eq(' + siblings.index(realNode) + ')';
      }

      path = name + (path ? '>' + path : '');
      node = parent;
  }

  return path;
};

相应的网址:https://www.orcode.com/question/466775_kb3fba.html

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 追风筝的哈桑 发表于 2022-7-9 15:00
icysky0605 发表于 2022-7-9 12:48
这个代码是jQeury扩展了一个方法,功能输出指定某个对象上所有上级对象,要求是它本身和上级对象必须有name ...

var getSelector = function(el, names) {
  if (el === document || el === document.documentElement) return "document";
  if (el === document.body) return "body";
  if (typeof names === "undefined") var names = [];
  if (el.id) {
      names.unshift('#'+el.id);
      return names.join(" > ");
  } else if (el.className) {
      var arrNode = [].slice.call(el.parentNode.getElementsByClassName(el.className));
      var classSelector = el.className.split(" ").join(".");
      if (arrNode.length == 1) {
          names.unshift(el.tagName.toLowerCase()+"."+classSelector);
      } else {
          for (var c=1,e=el;e.previousElementSibling;e=e.previousElementSibling,c++);
          names.unshift(el.tagName.toLowerCase()+":nth-child("+c+")");
      }
  } else {
      for (var c=1,e=el;e.previousElementSibling;e=e.previousElementSibling,c++);
      names.unshift(el.tagName.toLowerCase()+":nth-child("+c+")");
  }

  if (el.parentNode !== document.body) {
      getSelector(el.parentNode, names)
  }
  return names.join(" > ");
};

大佬,这个是啥意思呢
icysky0605 发表于 2022-7-9 12:48
这个代码是jQeury扩展了一个方法,功能输出指定某个对象上所有上级对象,要求是它本身和上级对象必须有name属性,直接上级没有这个属性为止
icysky0605 发表于 2022-7-9 12:57
随便改了个name,可以看到输出结果:#document>html>body>div>label
[HTML] 纯文本查看 复制代码
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="jquery-3.4.1.js"></script>
    <script>
        jQuery.fn.getPath = function () {
            if (this.length != 1) throw 'Requires one element.';
            var path, node = this;
            while (node.length) {
                var realNode = node[0], name = realNode.nodeName;
                if (!name) break;
                name = name.toLowerCase();

                var parent = node.parent();

                var siblings = parent.children(name);
                if (siblings.length > 1) {
                    name += ':eq(' + siblings.index(realNode) + ')';
                }

                path = name + (path ? '>' + path : '');
                node = parent;
            }

            return path;
        };
    </script>
</head>
<body>
    <div>
        <label id="test"></label>
    </div>
    <script>
        var p = $('#test').getPath();
        console.log(p);
    </script>
</body>
</html>
ey5740 发表于 2022-7-9 14:40
$('#元素') , 获取元素名字后, 一直往上找父级,并把所有父级拼起来 body>div > label
 楼主| 追风筝的哈桑 发表于 2022-7-9 14:51
icysky0605 发表于 2022-7-9 12:57
随便改了个name,可以看到输出结果:#document>html>body>div>label
[mw_shl_code=html,true]

厉害,所以就是路径吧
 楼主| 追风筝的哈桑 发表于 2022-7-9 14:52
icysky0605 发表于 2022-7-9 12:48
这个代码是jQeury扩展了一个方法,功能输出指定某个对象上所有上级对象,要求是它本身和上级对象必须有name ...

哇,感谢
cao777 发表于 2022-7-26 15:25
本帖最后由 cao777 于 2022-7-26 15:29 编辑

兄弟你好 你的王道训练营c++还有吗 感觉他们讲的不错 可以发一份吗 谢谢
大家好,在此收集王道训练营c加加
有效期截止到2022年8月2日15:29,麻烦在此之前点击以下链接将文件发送给我,支持发送任意格式的文件,感谢~
链接:https://pan.baidu.com/disk/main#/transfer/send?surl=AAUAAAAAAA7IOA
来自:我爱学编程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表