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(" >");