【问题标题】:Manipulating DOM elements with jQuery and chaining使用 jQuery 和链接操作 DOM 元素
【发布时间】:2011-06-09 19:17:34
【问题描述】:

玩弄 jQuery(抱歉,完全是菜鸟)我想知道为什么这不起作用。也许我没有理解链接、上下文和 DOM 操作的工作方式,但我只是好奇。就是这样:

$("#myDiv")
    .append("h3")
    .append("a")
    .attr("href", "http://example.com")
    .text("Click here")
    .end();

我预计会发生什么:

  • 选择#myDiv
  • 在其中插入一个 H3
  • 然后在H3里面,插入一个A标签
  • 将 A 标签的 HREF 属性设置为 URL
  • 然后将A标签的文字设置为“点击这里”

相反,我的页面标记似乎完全搞砸了,虽然我看不到动态 DOM,所以我不确定发生了什么。我读错了 jQuery 文档吗?

【问题讨论】:

  • .end() 也是不必要的

标签: javascript jquery dom


【解决方案1】:

应该是

$("#myDiv")
    .append("<h3>").children('h3:last')
    .append("<a>").children('a:last')
    .attr("href", "http://example.com")
    .text("Click here")

每个方法都返回执行它的原始 jQuery 对象(traversing 除外,如 findchildren),因此您可以继续处理它们。 p>

我完全删除了.end(),因为它仅在您使用更改 jQuery 对象的遍历方法时才有用。


所以你原来的,(除了错误,如果你想添加标签,附加的 html 需要标签)会在#myDiv 上附加一个h3,然后附加一个a再次设置为#div,然后将属性href 设置为#myDiv,最后设置其文本 - #myDivs 文本;)

一切都将在#myDiv 上完成。

【讨论】:

  • @sakuntala 此外,您可以使用 FireFox 的 Firebug (getfirebug.com) 查看更新后的 DOM。
  • 或 Chrome 中的开发者工具...我敢肯定 Safari 和 IE 也有一些东西
  • 您能告诉我您的方法与下面 Sime 的答案之间的区别吗?他通过将标签包含在$() 调用中来直接引用标签……这是如何工作的?
  • 您可以将 html 传递给 jquery 方法 ($),它会将其转换为有效的内存节点,请参阅 api.jquery.com/jQuery/#jQuery2 @Šime 使用对 jquery 函数的新调用,@987654338 @ 动态创建元素并将返回的值用作上一个命令的参数。所以他正在调用一个方法并将另一个方法的返回值作为参数传递..等等。所以他并没有真正链接很多东西..这是完成同一件事的另一种方法,但不是通过链接..
  • 好的,感谢您的解释和帮助。非常感谢。
【解决方案2】:

给你:

$('#myDiv')
    .append($('<h3>')
        .append($('<a>')
            .text('Click here')
            .attr('href', 'http://example.com')));

现场演示: http://jsfiddle.net/HNMET/1/

请注意,DOM 仅被操作一次(= 当 H3 元素附加到 DIV 时)。


由于上面的代码有点棘手(我猜这让它有点混乱),我把它分成了 3 行。请注意,这实际上是相同的代码,我只添加了两个“帮助”变量以使其更具可读性:

var anchor, h3;

anchor = $('<a>').text('Click here').attr('href', 'http://example.com');
h3 = $('<h3>').append( anchor );
$('#myDiv').append( h3 );

现场演示: http://jsfiddle.net/HNMET/11/

【讨论】:

  • 天哪,满是星星。这么有用的工具,非常感谢!!
  • 顺便说一句,对不起,我不能投票给你的答案,但这件事不会让我:\
  • 再次感谢您,这很有启发性。我仍在努力学习这些东西。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 2012-08-02
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
相关资源
最近更新 更多