更改只有<标签>标记在<李>
Changing tags that have only <label> tag within <li>
我有以下html结构
<ul>
<li>
Text <label>1#</label> <input type="text" value="" />
</li>
<li>
Text <label>2#</label> <input type="text" value="" />
</li>
<li>
Text <label>3#</label> <input type="text" value="" />
</li>
<li>
Text <label>4#</label> <input type="text" value="" />
</li>
<li>
Text <label>5#</label> <input type="text" value="" />
</li>
<li>
<label>6#</label>
</li>
<label>7#</label> <input type="text" value="" />
</li>
</ul>
我需要从<ul>
Li开始打破这个结构,它在标签中只有<label>
。最终结果是
<ul>
<li>Text
<label>1#</label>
<input type="text" value="" />
</li>
<li>Text
<label>2#</label>
<input type="text" value="" />
</li>
<li>Text
<label>3#</label>
<input type="text" value="" />
</li>
<li>Text
<label>4#</label>
<input type="text" value="" />
</li>
<li>Text
<label>5#</label>
<input type="text" value="" />
</li>
</ul>
<!-- DIVIDE -->
<ul>
<li>
<label>6#</label>
</li>
<li>
<label>7#</label>
<input type="text" value="" />
</li>
</ul>
我正在尝试使用.replace();
的一些组合,但没有进一步的尝试。有可能做到这一点吗?
演示代码
这是我的解决方案:
$("ul>li:not(:has(:not(label)))").each(function() {
var li = $(this);
var newUl = $(document.createElement("ul"));
li.parent().after(newUl);
li.nextAll("li").andSelf().appendTo(newUl);
});
这适用于多个分隔符。
小提琴在这儿:http://jsfiddle.net/LucasTrz/hWjLB/
还不清楚所需的结果是什么,还要注意您的HTML已经损坏:元素#7缺少一个打开的li
标记。因此,假设您想移出第一个没有input
的li
和之后的所有li
元素,并将这些li
元素放置在一个单独的(新的(ul
中,代码如下:
var x = $('<ul>').insertAfter('ul');
var y = $('ul li:not(:has(>input))');
var z = $(y).nextAll();
$(y).appendTo(x);
$(z).appendTo(x);
Fiddle:http://jsfiddle.net/FGJLg/3/
我建议:
// select all the label elements:
$('label')
// filter that collection:
.filter(function () {
// keeping only those 'label' elements that have no siblings:
return $(this).siblings().length === 0;
})
// moving to the closest ancestor 'li' elements of those 'label' elements:
.closest('li')
// adding a specific class (for the next part):
.addClass('labelOnly')
// selecting all elements that follow, until another element with the added
// class-name is found:
.nextUntil('li.labelOnly')
// adding the original 'li' back to the selection:
.addBack()
// wrapping those 'li' elements in a 'ul':
.wrapAll('<ul></ul>')
// 'wrapAll()' returns the original (wrapped) elements, we use 'parent()'
// to get to the 'ul':
.parent()
// and append it to the body:
.appendTo('body');
JS Fiddle演示。
参考文献:
- CCD_ 10
- CCD_ 11
appendTo()
closest()
filter()
parent()
- CCD_ 16
$('li:not(:has(> input))').each(function () {
var myList = $(this).parent('ul');
var myEls = $(this).nextAll('li').andSelf();
myEls.remove();
myList.after(myEls);
myEls.wrapAll('<ul>');
});
http://jsfiddle.net/isherwood/asn4L
相关文章:
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- 如何逃离<>在javascript下划线模板中
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 正则表达式,它允许除“”之外的所有字符<>_;{}[]”;
- ajax调用:响应<->数据类型
- 如果所有三个文本框<>然后是100%
- CORS的问题.烧瓶<->AngularJS
- 有没有一种方法可以创建与Java<->JSON映射对象,如JSON.stringfy(jsObject)创建的
- 什么是%<>%调用了语法
- JavaScript返回值:What dos<>意思是
- JavaScript中哪种类型的值对应于Java`List<>`
- 如何发送类似“<>"在参数中使用$.ajax-to-server
- 不等于<>操作员不工作
- jquery附加函数转换<>到实体名称
- 只有当超过3个元素时才显示更多内容按钮,否则不显示.使用jquery's:lt:gt
- 为什么在<>ckeditor中不支持
- url有效性的Java脚本regexp,带有<>
- 设计Javascript前端<->C++后端通信
- 比较查询运算符ObjectId<->日期