jQuery 替换问题

发布于 2024-11-06 09:34:23 字数 601 浏览 1 评论 0原文

我正在用 AJAX 调用返回的 HTML 替换 DOM 节点。返回的 HTML 有一个 id,具有该 id 的 DOM 节点将被替换。

回调函数

function updateTrip(xml, success, jqXHR) {
  var para = $(xml);  
  var id = para.attr('id');
  $("#"+id).replaceWith(para);  
}

尽管具有固定 id 的相同代码可以工作,并且等效的原始 JavaScript 函数也可以工作,但

function updateTrip(xml, success, jqXHR) {
  var para = $(xml).get(0);  
  var id = para.getAttribute('id');
  var div = document.getElementById(id);
  div.parentNode.replaceChild(para, div);   

无法替换节点。

id 看起来像 n-1.12.2.2.4 ;内容类型是text/html; FF 错误控制台中未报告任何错误。

I'm replacing a DOM node with HTML returned from an AJAX call. The returned HTML has an id and the DOM node with that id is to be replaced.

The callback function

function updateTrip(xml, success, jqXHR) {
  var para = $(xml);  
  var id = para.attr('id');
  $("#"+id).replaceWith(para);  
}

fails to replace the node although the same code with a fixed id works, and the equivalent raw JavaScript function also works

function updateTrip(xml, success, jqXHR) {
  var para = $(xml).get(0);  
  var id = para.getAttribute('id');
  var div = document.getElementById(id);
  div.parentNode.replaceChild(para, div);   

}

The ids look like n-1.12.2.2.4 ; the content-type is text/html; no errors reported in the FF error console.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瞄了个咪的 2024-11-13 09:34:23

问题出在您的 id 中的 . 上,您需要转义 . 才能使选择器正常工作。

示例:

$("#n-1\\.12\\.2\\.2\\.4")

话虽这么说,最简单的选择是使用 document .getElementById() 并简单地使用 .replaceWith()

function updateTrip(xml, success, jqXHR) {
  var para = $(xml);  
  var id = para.attr('id');
  var a = document.getElementById(id);
  $(a).replaceWith(para);  
}

示例在jsfiddle

或者如果你想执行 replace() 选项,它看起来像这样:

function updateTrip(xml, success, jqXHR) {
    var para = $(xml);
    var id = para.attr('id').replace(/\./g, '\\.');
    $('#' + id).replaceWith(para);
}

jsfiddle 上的示例

The issue is with the . in your id, you need to escape the . for the selector to work correctly.

Example:

$("#n-1\\.12\\.2\\.2\\.4")

With that being said, the easiest option would be to use document.getElementById() and simply use .replaceWith()

function updateTrip(xml, success, jqXHR) {
  var para = $(xml);  
  var id = para.attr('id');
  var a = document.getElementById(id);
  $(a).replaceWith(para);  
}

Example on jsfiddle

or if you want to do the replace() option it would look like this:

function updateTrip(xml, success, jqXHR) {
    var para = $(xml);
    var id = para.attr('id').replace(/\./g, '\\.');
    $('#' + id).replaceWith(para);
}

Example on jsfiddle

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文