Javascript 获取两个图像之间的文本
有没有更简单的方法来捕获两个没有相同父元素的图像之间的文本? 我正在为一个网页制作一个用户脚本。 比如:Javascript 获取两个图像之间的文本,javascript,html,Javascript,Html,有没有更简单的方法来捕获两个没有相同父元素的图像之间的文本? 我正在为一个网页制作一个用户脚本。 比如: 一些文本 更多文本 如何获取div内容的第一个图像和第二个图像之间的文本。我不知道确切的结构,因为可能文本和图像可能在div或a节点内部。我宁愿不使用图书馆这个答案不是最好的,我只是把它放在这里仅供参考 1-下降 2-转到下一个兄弟姐妹 3-如果没有,就上去找下一个兄弟姐妹 重复一遍 就像穿过这样的山谷:D \ div#content
一些文本
更多文本
如何获取div内容的第一个图像和第二个图像之间的文本。我不知道确切的结构,因为可能文本和图像可能在div或a节点内部。我宁愿不使用图书馆这个答案不是最好的,我只是把它放在这里仅供参考 1-下降 2-转到下一个兄弟姐妹 3-如果没有,就上去找下一个兄弟姐妹 重复一遍 就像穿过这样的山谷:D
\ div#content /
\txt/\ div /\ div /\ div /\txt/\ div /
\ a / \txt/ \ a / \img2/
\img1/ \txt/\txt/
好吧,几个小时后我发现了,并做了算法:
function textAfterElem (el, nextEl) {
var txt = "";
while(true){
//go down
while(el.firstChild) {
el = el.firstChild;
if (el == nextEl) {return txt;}
}
txt += el.textContent; // extract
//go next
if (el.nextSibling) {
el = el.nextSibling;
if (el == nextEl) {return txt;}
}else{
//go up
while(!el.nextSibling) {
el = el.parentNode;
if (el == document.body) {return txt;} // for security
}
if (el.nextSibling) {
el = el.nextSibling; // go next
if (el == nextEl) {return txt;}
}else{
return txt; // for security
}
}
}
return txt;
}
它不仅可以用于图像,还可以用于任何元素,您基本上希望将
标记作为要提取文本的引号来处理
最简单的方法是用文本中不太可能重复的内容替换
标记,并使用该字符作为分隔符。我将向您展示如何使用jQuery。如果您需要在纯JS中完成它,那么您必须转换它
首先,制作HTML的副本
var html = $('<div>').append($("#content").html());
要找到所有匹配项,只需重复
while(match != null)
{
alert(match[1]);
match = rx.exec(str);
}
也可以用像@img@
这样的独特短语来代替单个字符,但单个字符更容易
这是一把小提琴
用纯javascript改进Mathew的答案:
var html = document.getElementById('content').cloneNode(true);
var imgs = html.getElementsByTagName('img');
for (i = 0; i < imgs.length; i++) {
var textSep = document.createTextNode('@img@');
imgs[i].parentNode.insertBefore(textSep, imgs[i]);
}
var texts = html.textContent;
texts = texts.split('@img@');
var html=document.getElementById('content').cloneNode(true);
var imgs=html.getElementsByTagName('img');
对于(i=0;i
简单的擦除和拆分也可以:
html.replace(/<(?!img\b)[^>]*>/g, '').split(/<img\b[^>]*>/)
你能提供更多关于条件的细节吗?你可以用一个类名将整个东西包装在一个
div
中,并使用它来获取内部文本。你所寻找的东西是否可能做到这一点?你应该提供更多的案例,以便我们能够看到最适合你的选择。你是否阅读了这里问题的答案“”?我不完全相信它是重复的,但我认为它可能是。那么,这个问题的答案成功地回答了你自己的问题吗?如果不是,考虑一下他们如何去解决你的需求(仅仅因为一个问题是相似的并不意味着它们不能是不同的/不重复的)。尽管你现在有责任清楚地解释你的问题是如何不同的,以及在这种情况下,另一个问题的答案是如何失败的。包括代码、任何错误消息、使用不同/否库……是的,这是一个很好的逻辑,我认为我的循环解决方案风险太大,如果我更好地使用@img@,正则表达式会是什么?因为我认为~号或另一个单号风险太大,但我意识到使用split(“~”)
而不是regexWell会更好。如果循环失控,这个解决方案有点风险
while(match != null)
{
alert(match[1]);
match = rx.exec(str);
}
var html = document.getElementById('content').cloneNode(true);
var imgs = html.getElementsByTagName('img');
for (i = 0; i < imgs.length; i++) {
var textSep = document.createTextNode('@img@');
imgs[i].parentNode.insertBefore(textSep, imgs[i]);
}
var texts = html.textContent;
texts = texts.split('@img@');
html.replace(/<(?!img\b)[^>]*>/g, '').split(/<img\b[^>]*>/)
["↵ ", "↵ some text↵ ", "↵ more text↵"]