jquery - 如何使用 Jquery 获取 HTML 标签的完整定义?

标签 jquery html css

要在 JQuery 中获取标签名称,我们使用:

     $(someCssSelector).prop('tagName');

这将返回标签名称,例如'DIV', '表格'

除了遍历元素并获取每个属性的值之外,如何获取包含所有属性的整个标记定义?我需要定义的文本。例如:

<div id="myDiv" style="...." title="....">....</div>

给定任何元素的 CSS 选择器,我想得到,作为字符串:

<div id="myDiv" style="...."  title="....">

输出字符串中属性的顺序并不重要。

最佳答案

一个选项是检查元素的 outerHTML , 并匹配 <> :

const openingHtmlTag = $('#myDiv')[0]
  .outerHTML
  .match(/<[^>]+>/)[0];
console.log(openingHtmlTag);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="myDiv" style="color:green" title="foobar">content<div>

或者,在有些不寻常的情况下,属性属性可以包含 > s 和转义引号,正则表达式需要展开:

const re = /^<(?:[^'">]*|(['"])(?:\\.|(?!\1).)*\1)+>/s;
const openingHtmlTag = $('#myDiv')[0]
  .outerHTML
  .match(re)[0];
console.log(openingHtmlTag);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="myDiv" style="color:green" title="foobar">content<div>

https://regex101.com/r/OBNoBa/1

^<(?:[^'">]*|(['"])(?:\\.|(?!\1).)*\1)+>意思是:

  • ^< - 字符串开头,后跟 < (开始标签的开始)
  • (?:[^'">]*|(['"])(?:\\.|(?!\1).)*\1)+ - 重复 1 次以上:
    • [^'">]* - 除引号或右括号外的任何内容,或者:
    • (['"])(?:\\.|(?!\1).)*\1引用的属性:
    • (['"]) - 开始字符串定界符,第一个捕获组。然后重复匹配:
      • \\. - 任何转义字符(例如,这允许匹配 \',而不是将 ' 解释为结束字符串定界符),或者
      • (?!\1). - 除了字符串定界符之外的任何内容
    • \1 - 再次是字符串定界符(引用属性的结尾)
  • > - 关闭开始标签

另一种选择是对节点进行浅克隆(从而忽略它可能拥有的任何子节点),取其 outerHTML , 并去掉结束标签(这更容易匹配):

const re = /^<(?:[^'">]*|(['"])(?:\\.|(?!\1).)*\1)+>/s;
const cloned = $('#myDiv')[0].cloneNode(false);
const html = cloned.outerHTML.replace(/<\s*\/\w+\s*>$/, '');
console.log(html);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="myDiv" style="color:green" title="foobar">content<div>

关于jquery - 如何使用 Jquery 获取 HTML 标签的完整定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57237772/

相关文章:

javascript - 如何正确地将选择标签放入表格单元格

javascript - Firefox 中的多选错误

javascript - 设置最大高度而不溢出

CSS:取消列表开头和结尾的属性

html - 列表项内的 Bootstrap 网格

javascript - 不使 div 可点击的 anchor 标记

java - 如何将 boolean 变量作为 ModelAttribute 对象的字段发送到服务器端?

javascript - 如何仅在单击专用按钮时激活功能

javascript - 使用 vanilla javascript 获取 <ul> <li> 子节点的 CSS 属性

html - CSS - 在::after 中定位内容时出现问题