1

任何人都可以解释为什么我得到这个。我正在尝试做的<ul><div>基于<a>匹配<li>.

<ul>它有点工作,因为它找到了树的正确部分。但它似乎没有复制它,而是完全从原始树中提取它。

这是代码,但请参阅以下链接中的工作内容:

$(document).ready(function (e) {
  var test = "/our-services/";
  var subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent();
  $('#thing').html(subNav).wrapInner('<ul/>');
});

jsFiddle

是什么赋予了?

4

2 回答 2

4

您需要使用该clone()方法来避免移动最初找到的节点/元素:

$(document).ready(function (e) {
    var test = "/our-services/"
        subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent().clone(true);

    $('#thing').html(subNav).wrapInner('<ul/>');
});

JS 小提琴演示

或者,稍微重写一下:

$(document).ready(function (e) {
    var test = "/our-services/",
        subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent().clone(true);

    subNav.appendTo('#thing').wrap('<ul />');
});

JS 小提琴演示

参考:

于 2013-05-10T11:24:57.780 回答
1

有趣的行为!这可能是因为 jQuery 在后台做了一些奇怪的事情,因为它希望将 astring传递给该.html()方法,但是您传递给它的是一个包装在 jQuery 对象中的整个 dom 节点。请参阅Jquery 文档

尝试获取该节点的 html 内容并将其传递给如下.html()方法:

$(document).ready(function (e) {
  var test = "/our-services/";
  var subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent();
  $('#thing').html(subNav.html()).wrapInner('<ul/>');
});

编辑

请记住,这将剥离附加到原始节点的任何数据或事件处理程序,这可能是也可能不是所需的行为,具体取决于您的实现。如果要保留它们,请使用clone()其他答案中描述的方法,但使用默认方法clone(true)代替。clone(false)

也可以看看:

将元素或对象传递给 jQuery .html() 方法以解释 .html() 方法为何接受 jQuery 对象以及字符串。

于 2013-05-10T11:27:14.133 回答