Javascript 向每个具有子节点的li节点添加文本

Javascript 向每个具有子节点的li节点添加文本,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我正在尝试向列表中包含子节点的每个节点添加文本 下面是一个例子: <ul class="dropdown"> <li style="width: 100px"> <a href="@Url.Action("SearchOrders", "ManageOrders")">Orders</a> <ul> <li>@Html.ActionLink("Create Su

我正在尝试向
列表中包含子节点的每个
  • 节点添加文本

    下面是一个例子:

    <ul class="dropdown">
        <li style="width: 100px">
            <a href="@Url.Action("SearchOrders", "ManageOrders")">Orders</a>
            <ul>
                <li>@Html.ActionLink("Create Supplier Order", "CreateSupplierOrder", "ManageOrders")</li> 
                <li>@Html.ActionLink("Checkout Supplier Orders", "DisplaySupplierOrdersToCheckout", "ManageOrders")</li>
                <li>
                    <a href="@Url.Action("SearchByOrders", "RefundOrder")">Issue a refund</a>
                    <ul>
                        <li>@Html.ActionLink("By Orders", "SearchByOrders", "RefundOrder")</li>
                        <li>@Html.ActionLink("By Customer", "SearchByCustomers", "RefundOrder")</li>
                        <li>@Html.ActionLink("By items", "SearchByItems", "RefundOrder")</li>
                    </ul>
                </li>
                <li>@Html.ActionLink("List Orders", "SearchOrders", "ManageOrders")</li>
            </ul>
        </li>
    </ul>
    
    代码的第一部分起作用,并通过颜色指示节点有子节点,但文本不变

    我也试过:

    $(".dropdown ul li:has('ul')").text(" >");
    
    或:

    但是第一个替换了整个文本,而第二个将文本附加到新的一行,这不是想要的效果

    有人能帮我吗?注意,我可以简单地在HTML中重写节点以手动添加文本,但我希望通过jQuery实现这一点。谢谢大家!

    这是一个不想要的效果的视觉例子

    这里有一段来自网页的代码,我想是来自DOM,是吗

    编辑我的问题已部分解决。以下是我迄今为止所做的工作:

    $(".dropdown ul li:has('ul')").each(function () {
            $(this).html($(this).find('a:first').html() + " >");
        });
    

    这确实会在正确的位置添加文本,但是锚定链接不再起作用,子对象也不会显示。

    我会尝试以下方法:

    $( '.dropdown ul li:has( "ul" )' ).each( function()
    {
        var that = $( this );
        var currentText = that.html( );
        var newText = currentText + '>';
    
        that.html( newText );
    }
    

    从本质上讲,它与Milind的答案非常相似,但这种方式更为明确,并将其分解为不同的步骤,这可能有帮助,也可能没有帮助,谁知道呢:p。对不起,如果您认为我的代码看起来有点愚蠢,我喜欢使用大量空格和显式声明我希望它能起作用!如果没有,那么在当前文本的末尾可能会有一个新行字符,如果是这种情况,那么我们需要找到一种方法,在连接'>'之前去掉它。

    使用append是正确的想法,但是查看代码,您似乎想将>添加到列表中的a标记中(似乎a已设置为
    display:block;
    ,这将导致>转到新行)。请尝试以下操作:

    $(".dropdown ul li:has('ul')").find("> a").append(" >");
    

    这会将>添加到任何直接子a标记。

    我猜您想要“>”对于这类问题,在

    中的文本之后,最好提供一个JSFIDLE,当然还有相关的呈现HTML标记,而不是这个服务器端code@A.Wolff我正在做JSFIDLE的路上,但是一个用户提供了一个可行的解决方案,这有点超过了我寻找。谢谢!你应该使用可读性更强的方法
    .children('a')
    而不是
    .find(“>a”)
    。无论如何,+1A贪婪,.children('a')也会做同样的工作,但会使代码更清晰
    $( '.dropdown ul li:has( "ul" )' ).each( function()
    {
        var that = $( this );
        var currentText = that.html( );
        var newText = currentText + '>';
    
        that.html( newText );
    }
    
    $(".dropdown ul li:has('ul')").find("> a").append(" >");
    
    $("a + ul", listItems).prev().append(" >");