javascript - 为什么 jQuery 无法隐藏某些 HTML?

标签 javascript jquery html

我一直在努力解决这个问题。采用以下 HTML 正文:

<body>
<div id="project">
  <h1>Hi</h1>
  <h2>Hello</h2>
</div>
</body>

以及以下 jQuery 代码:

$(function(){
  var h = $('#project').html();
  $('#project').remove();
  $(h).hide().appendTo('body');
  alert("Created HTML, hide, and appended!");
});

$(h).hide()部分导致 jQuery 在 Safari 4 和 Firefox 3.5 中抛出异常。

Safari : TypeError: Result of expression 'this[a].style' [undefined] is not an object.
火狐: uncaught exception: [Exception... "Could not convert JavaScript argument arg 0" nsresult: ...]

当我将 HTML 更改为仅包含两个标题之一时(如果从 HTML 中删除 <h1><h2>,脚本将成功运行。这是为什么?

要亲自尝试,请参阅 http://jsbin.com/avisi/edit

编辑:我实际上并没有尝试从 DOM 中删除元素并通过复制 HTML 重新插入它。这只是我在更复杂的代码中遇到的错误的测试用例,我试图理解为什么会出现此错误。我同意,如果我只想完成这里显示的内容,我会使用类似 $('#project').remove().children().appendTo('body') 的东西。

最佳答案

我无法在 Firefox 中复制您的错误。但是,您可能想尝试使用以下方法清理它:

$('#project').remove().children().appendTo('body').hide();

分解,这是正在发生的事情

// Get the `project` container
$('#project')
    // Remove it from the page
    .remove()
    // Get its children (the h1, h2, etc)
    .children()
    // Append those nodes to the body
    .appendTo('body')
    // Hide those nodes
    .hide();

其他人建议 .hide() 会导致问题,因为它所应用的节点不是主文档的一部分;然而,事实并非如此。只要您保持对任何节点的引用,就可以影响其样式属性(通过 hideshow 等)。

您可能想要检查的一件事是确保 $('#project') 实际上返回了(如果有)预期的节点。否则可能会出现问题。


所以我在 Safari 中四处寻找,发现了你的问题。这是来自开发人员控制台的转储。

> var h = $('#project').html();
undefined
> var t = $(h);
undefined

到目前为止,还不错。 undefined 这里只是意味着语句(var 语句)没有返回值(它没有)

> t.hide()
ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js:131TypeError: Result of expression 'this[a].style' [undefined] is not an object.

这是您描述的错误。检查 jQuery 对象中的每个项目将显示以下错误

> t[0]
<h1 style=​"display:​ none;​ ">​Hi​</h1>

好...

> t[1]
(whitespace)

该死。真的吗?这就是问题所在。空白节点没有 style 属性,这是导致问题的原因。

> t[2]
<h2>​Hello​</h2>

这就是为什么将一个节点的 HTML 复制到另一个节点只是为了移动这些节点是一种糟糕的技术。我建议您使用我在上面提供的代码段。

关于javascript - 为什么 jQuery 无法隐藏某些 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295061/

相关文章:

javascript - jQuery 验证和忽略字段

jquery - 尝试解析 JSONP 时 jQuery 和 $.ajax 出现问题

PHP AJAX Jquery - 文件下载问题

css - CSS 页眉周围的空格

html - 将缓存 list 添加到 Meteor 应用程序的简单方法?

php - 编码时为什么要格式化以及如何格式化

javascript - 如何在 alert() 函数中分两行显示消息

javascript - jQuery - 快速移动鼠标时 Mouseleave 不触发

javascript - 如何以简单的方式创建数据表?

javascript - React Native - 根据其父答案处理动态表单