You don’t have to use >
on the dial in .children()
. If you want to find direct children li
of ul
cloned, just use the selector li
:
clone.children("li").each(function() {
The method .children()
seeks only elements in the first level (direct children), ie, .children("li")
of the cloned object will find the following li
's:
<ul id="menu">
<li>Menu 1 </li> ← este
<li> Menu 2 ← este
<ul>
<li>Sub-Menu 1</li>
<li>Sub-Menu 2</li>
</ul>
</li>
<li>Menu 3 </li> ← este
</ul>
After cloning the element, you need to insert it somewhere. In the example below I used .append()
to insert at the end of the body
.
Your example:
function menu(){
clone = $( ".menu").clone();
clone.children("li").each(function() {
if($(this).find("ul").length > 0){
$(this).append("<span>Adiconar Seta</span>");
}
});
$("body").append(clone);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="menu()">Clonar</button>
<ul class="menu">
<li>Menu 1 </li>
<li> Menu 2
<ul>
<li>Sub-Menu 1</li>
<li>Sub-Menu 2</li>
</ul>
</li>
<li>Menu 3 </li>
</ul>
The problem is that by cloning <ul id="menu">
you will be duplicating id’s, which is incorrect in HTML, where an id should be unique, although this will not affect the cloning part as the code $("#menu").clone()
will always point to the first <ul id="menu">
. But it is better to change the id="menu"
for class="menu"
.
Reference:
jQuery . Children()
I don’t understand what outcome you expect... what would be the purpose of this cloned object?
– JrD
You will clone an entire Menu that will have the same ID as the cloned menu and then put the loose span inside a UL type <ul><span></span><li></li></ul>? It’s all kind of confusing and meaningless... Explain better there what you want to do
– hugocsl