如何在两个特定元素之间选择内容
How to select the content between two specific elements?
我有两个常量元素:(总是存在的)
-
span.start
-
span.stop
这是我的HTML结构(模式):
...
=/* each tag|string|element can be in here */
...
<span class="start"> ... </span>
... /* now I want to select every-text is in here */
<span class="stop"> /... </span>
...
注意:我只想选择文本内容(.text()
)
以下是示例:
<div class="one">
<a href="www.example.com">LinkName</a>
there is sometimes a string
<span class="start">what</span> // --------------- beginning of range
I
<div>want</div>
<span>to</span>
<span class="stop">select</span> // --------------- end of range
<div class="two">
there can be any element/string else
</div>
</div>
我还想要这个输出:
what I want to select
我尝试过的::
var content = $('body').html().split($('span.stop')[0].outerHTML)[0].trim().text();
但这仅仅取决于span.stop
。换句话说,它只是选择顶部(前面、后面)span.stop
上的所有文本。
这里是伪代码:
获取父元素子节点:从等于"开始"节点的节点:从每个下一个节点获取文本内容,直到到达"结束"节点
function getTextInbetween(startNode, stopNode) {
if (startNode.parentElement != stopNode.parentElement) return;
var elements = startNode.parentElement.childNodes;
// Get Start-Position
var startPos = -1;
for (var i = 0; i < elements.length; ++i) {
if (elements[i] == startNode) {
startPos = i;
break;
}
}
//var startPos = [].indexOf.call(elements, startNode); // Short version of the loop
// Get all the text from start to stop
var text = "";
for (var i = startPos; i < elements.length; ++i) {
text += elements[i].textContent;
if (elements[i] == stopNode) {
break;
}
}
// remove lines and spaces as HTML does
text = text.trim();
text = text.replace(/'s+/g, " ");
return text;
}
var startNode = document.getElementsByClassName("start")[0];
var stopNode = document.getElementsByClassName("stop")[0];
var text = getTextInbetween(startNode, stopNode);
console.log(text);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="one">
<a href="www.example.com">LinkName</a>
there is sometimes a string
<span class="start">what</span>
I
<div>want</div>
<span>to</span>
<span class="stop">select</span>
<div class="two">
there can be any element/string else
</div>
</div>
尝试使用.contents()
、.map()
、.prevAll()
、.is()
、$.trim()
、.get()
、Array.prototype.filter()
var text = $(".one").contents().map(function(i, el) {
if ($(el).prevAll(".start").is("*") && !$(el).is(".stop, .stop ~ *"))
return $.trim(el.textContent || el)
else return null
}).get().filter(Boolean);
console.log(text)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="one">
<a href="www.example.com">LinkName</a>
there is sometimes a string
<span class="start">what</span> // --------------- beginning of range I
<div>want</div>
<span>to</span>
<span class="stop">select</span> // --------------- end of range
<div class="two">
there can be any element/string else
</div>
</div>
包括.start
和.stop
元素的文本
var text = $(".one").contents().map(function(i, el) {
if (($(el).is(".start, .start + *, .start ~ *:not(.stop + *)")
|| $(el).prev(".start").is("*"))
&& !$(el).is(".stop ~ *") && el.nodeType !== 8)
return $.trim(el.textContent || el)
else return null
}).get().filter(Boolean);
console.log(text, text.join(" "))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="one">
<a href="www.example.com">LinkName</a> there is sometimes a string
<span class="start">what</span>
<!--------------- beginning of range -->
I
<div>want</div>
<span>to</span>
<span class="stop">select</span> NOT THIS
<!--------------- end of range -->
<div class="two">
there can be any element/string else
</div>
</div>
尝试使用jquery next()选择器访问同级,直到到达停止节点。你可以在这里阅读更多关于它的内容以及示例https://api.jquery.com/next/
相关文章:
- 操作放置在画布上的元素之间的连接
- DOM元素和angular元素之间的主要区别是什么
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- Javascript集:任何覆盖元素之间比较的方法
- jqmobile列表视图中元素之间的间距相等
- 如何在两个动画画布元素之间进行通信
- 第一个元素和最后一个元素之间的连续循环
- 在元素之间导航的Javascript
- 在照片库中的两个元素之间切换样式会发生变化
- 计数元素之间的语法混淆
- jquery多次在元素之间插入html
- javascript,两个数组的相同元素之间的比较
- 3个元素之间的自动切换
- 如何使用jQuery在两个元素之间切换类
- 自定义元素之间的聚合物双向结合[包括示例]
- 使用setTimeout在创建新元素之间强制延迟
- 在javascript数组元素之间添加换行符
- 获取2个元素之间的元素
- 如何不断检查页面元素之间的冲突