ZBLOG

let str = `

你的观察是正确的!实际上,无论是使用 .prop('href') 还是 .attr('href'),浏览器在解析 HTML 时都会自动将 & 转换为 &(这是 HTML 规范的标准行为)。如果目标是 保留原始字符串中的 &,需要通过其他方式提取。


解决方案:直接从原始字符串中提取(不依赖 DOM 解析)

因为浏览器/DOM 会强制标准化属性值,所以最可靠的方法是 跳过 jQuery/DOM 解析,直接操作原始字符串:

let str = `<a url_type="" class="J_menuItem" href="https://10.8.87.73:9876/backstage/workflow/flowRun/myAllJobsList?menu=25389880aa664d8ab08d308c094256a3&amp;GratuitousProxy=c1a516fc7f385b92a23305733f31b2a0" data-index="5" style="color: rgb(94, 95, 97);">所有工单</a>`;

// 方法1:正则匹配(精确提取 href 内容)
const match = str.match(/href="([^"]*&amp;[^"]*)"/);
console.log(match[1]); // ✅ 输出包含 &amp;

// 方法2:替换回 &amp;(如果已转义)
const decodedUrl = $(str).prop('href'); // 先获取标准化的 URL
const encodedUrl = decodedUrl.replace(/&/g, '&amp;'); // 手动替换回 &amp;
console.log(encodedUrl); // ✅ 输出包含 &amp;

关键原因

  • 浏览器/DOM 的标准化行为
    当 HTML 被解析为 DOM 时,属性值中的 &amp; 会自动转换为 &。这是 HTML 规范的要求(如 <a href="...&amp;..."><a href="...&...">)。
  • 唯一可靠的方法
    如果需要保留原始的 &amp;,必须直接从字符串中提取(不经过 DOM 解析)。

输出结果

https://10.8.87.73:9876/backstage/workflow/flowRun/myAllJobsList?menu=25389880aa664d8ab08d308c094256a3&amp;GratuitousProxy=c1a516fc7f385b92a23305733f31b2a0

选择 方法1 (正则匹配)可以确保完全绕过浏览器的干扰!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8027

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?