Jquery 每到 <a> 只给我 href

Jquery each through <a> gives me href only

我有一个简单的菜单

<div class="nav-container desktop">
    <a href="_index.php?page=_sub_papa&main=klassen">One</a>
    <a href="_index.php?page=_sub_papa&main=tw">Twp</a>
</div>

我用 jQuery 遍历这个,然后用完整的 <a.../a>.

创建 <li> 标签
$.each( $('.nav-container>a'), function(i, item){
        var menupunkt = '<li>' + item + '</li>'
        console.log(i, menupunkt);
    });

示例:http://codepen.io/anon/pen/bwbgap, https://jsfiddle.net/86g44ssp/

在我的控制台中,我只看到以下内容

<li>http://xyz.ccom/_index.php?page=_sub_papa&main=tw</li>"

为什么我没有得到整个 a?因为当我只打印 "item" 时,我得到了整个 <a.../a>

$.each( $('.nav-container>a'), function(i, item){
        var menupunkt = '<li>' + $(item).text() + '</li>'
        console.log(i, menupunkt);
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nav-container desktop">
    <a href="_index.php?page=_sub_papa&main=klassen">One</a>
    <a href="_index.php?page=_sub_papa&main=tw">Twp</a>
</div>

我相信你想访问 outerHTML。我已经包含了另一个 SO 答案的代码:

jQuery, get html of a whole element

https://jsfiddle.net/86g44ssp/1/

我所做的更改在这里:

jQuery.fn.outerHTML = function() {
  return jQuery('<div />').append(this.eq(0).clone()).html();
};


... other code here ...

var menupunkt = '<li>' + $(item).outerHTML() + '</li>'
$( ".nav-container a" ).wrap( "<li></li>" );

这是将 .nav-container a 包裹在列表元素中的最快方法。

虽然循环 $.each('.nav-container a', function(i,v) {}); 每个 <a> 都像对象 NOT at TEXT

如果您想要定位特定元素,请使用:

$.each('.nav-container a', function(i,v) {
var fullObject = $(this).html(),
link = $(this).attr('href'),
text = $(this).text();
});

itemthis 代表一个 DOM 元素。当您将其视为字符串时,您将其转换为字符串。您可以使用 item.outerHTML - 您要查找的字符串 - 代替 item.

     $.each( $('.nav-container>a'), function(i, item){
        var menupunkt = '<li>' + item.outerHTML + '</li>'
        console.log(i, menupunkt);
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nav-container desktop">
    <a href="_index.php?page=_sub_papa&main=klassen">One</a>
    <a href="_index.php?page=_sub_papa&main=tw">Twp</a>
</div>

注意

不确定它是否有优势,但我更喜欢:

    $('.nav-container>a').each(function(i, item){
        var menupunkt = '<li>' + item.outerHTML + '</li>'
        console.log(i, menupunkt);
    });

我已经更新了your fiddle,你只需要更改

 var menupunkt = '<li>' + item + '</li>'

 var menupunkt = '<li>' + item.outerHTML + '</li>'

并且无需添加额外的包装或其他东西,只需从外部HTML 获取 HTML 就大功告成了!

这是类型转换造成的。当您执行 '<li>' + item + '</li>' 时,JavaScript 运行时将尝试将 item 转换为字符串。这是通过调用 item 上的 toString() 方法完成的 "under the hood",例如item.toString()。您可以通过显式执行强制类型转换

console.log(i, item.toString());