Jquery:检查第一个实例
Jquery: Check against first instance
使用奇怪的输出并将其转换为可读的剧本格式时遇到一些麻烦。
这是HTML
<div>
<p class="actor">John</p>
<p class="line">I want to buy milk.</p>
<p class="actor">John</p>
<p class="line">Milk is expensive.</p>
<p class="dirNote">John grabs the milk</p>
<p class="actor">John</p>
<p class="line">I guess its fine.</p>
<p class="actor">Steve</p>
<p class="line">Yeah.</p>
</div>
我试图解决这个问题失败了。但基本的想法是……
遍历p.actor
的每个实例将第一个实例存储为var
检查var
下一个实例如果它们是相同的
将该实例的p.line的内容附加到var
的p.line中else替换var
with new p.actor
同样,如果遇到p.d rdir,下一个p.d rator实例将设置新的变量
基本上完成后的HTML应该是这样的
<div>
<p class="actor">John</p>
<p class="line">I want to buy milk. Milk is expensive.</p>
<p class="dirNote">John grabs the milk</p>
<p class="actor">John</p>
<p class="line">I guess its fine.</p>
<p class="actor">Steve</p>
<p class="line">Yeah.</p>
</div>
对可行性有什么想法吗?谢谢你。
下面的代码片段应该可以解决问题。它基本上将集合转换为数组,并从集合中的最后一个元素开始。
$('p.actor').toArray().reverse().forEach(function (el) {
var
$this = $(el),
$prev = $this.prev().prev('.actor'),
$line
;
if ($this.text() !== $prev.text()) {
return;
}
$line = $this.next('.line');
$prev.next('.line').append(' ' + $line.text());
$this.add($line).remove();
});
http://jsfiddle.net/j9qwzyzq/我有一个半成品的答案。它比我想象的要复杂得多,所以我现在就到此为止。
它循环遍历你的段落,跟踪它们的类型并重新构建一个新的列表。它仍然需要弄清楚如何跟踪上一个(或下一个)行/演员和addRow
。希望对你有帮助。
var rows = $("#my-list p"),
newRows = [],
currentActor = null,
currentLine = null,
addRow = function (type, value) {
newRows.push({
type: type,
value: value
})
};
rows.each(function (index) {
var $row = $(this),
className = $row.attr("class"),
isActor = className == "actor",
isLine = className == "line",
isDirNote = className == "dirNote",
content = $row.text();
if (isLine) {
//TODO: keep track of line to be appended to next item (if same actor)
//TODO: if next element is same actor, append line
//addRow(className, content);
}
if (isDirNote || isActor) {
addRow(className, content);
}
console.log(content, isActor, isLine, isDirNote);
})
console.log(newRows);
//TODO: build new paragraph array from newRows
相关文章:
- 而循环只设置php中输入字段中的第一个值
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 在Javascript中对类的每个实例调用一个方法
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 高图表,检测点是否在堆栈中的第一个
- json结果显示第一个值