Javascript 有没有办法通过文本内容获取元素?
我有一个问题,我已经被困了一段时间,很抱歉在论坛上发了一点垃圾邮件 有没有办法通过元素的文本内容来获取它?下面是一个例子:Javascript 有没有办法通过文本内容获取元素?,javascript,click,getelementbyid,tampermonkey,jquery,Javascript,Click,Getelementbyid,Tampermonkey,Jquery,我有一个问题,我已经被困了一段时间,很抱歉在论坛上发了一点垃圾邮件 有没有办法通过元素的文本内容来获取它?下面是一个例子: <span id="result_5_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Navy</span> 我知道这是不存在的,但这只是为了让你明白。此外,我不能按Id或类名使用,也不能更改元素的HTML代码,因此必须使用文本内容,我看不
<span id="result_5_name" class="market_listing_item_name" style="color: #FFD700;">Item | Anodized Navy</span>
我知道这是不存在的,但这只是为了让你明白。此外,我不能按Id或类名使用,也不能更改元素的HTML代码,因此必须使用文本内容,我看不到其他方法
我非常感谢任何反馈
谢谢 好吧,既然您将问题标记为,您可以使用选择器:
var item = $(':contains(Item | Anodized Navy)');
但是请注意,这将返回包含该文本的每个元素,包括span
和span的所有父元素。如果只想获取最内部的元素(假设只有一个),只需获取最后一项,如下所示:
var item = $(':contains(Item | Anodized Navy)').last();
function getElementsByText(text) {
var spans = document.getElementsByTagName('span'),
results = [];
for(var i = 0; i < spans.length; i++) {
var content = spans[i].textContent || spans[i].innerText || '';
if (content.indexOf(text) != -1)
results.push(spans[i]);
}
return results;
}
var item = getElementsByText('Item | Anodized Navy');
function getelem() {
var item = getElementsByText('Item | Anodized Navy');
...
}
要在不使用jQuery的情况下执行等效操作,必须实现如下函数:
var item = $(':contains(Item | Anodized Navy)').last();
function getElementsByText(text) {
var spans = document.getElementsByTagName('span'),
results = [];
for(var i = 0; i < spans.length; i++) {
var content = spans[i].textContent || spans[i].innerText || '';
if (content.indexOf(text) != -1)
results.push(spans[i]);
}
return results;
}
var item = getElementsByText('Item | Anodized Navy');
function getelem() {
var item = getElementsByText('Item | Anodized Navy');
...
}
请注意,在您的代码中,getelem
需要在函数名后加上()
,如下所示:
var item = $(':contains(Item | Anodized Navy)').last();
function getElementsByText(text) {
var spans = document.getElementsByTagName('span'),
results = [];
for(var i = 0; i < spans.length; i++) {
var content = spans[i].textContent || spans[i].innerText || '';
if (content.indexOf(text) != -1)
results.push(spans[i]);
}
return results;
}
var item = getElementsByText('Item | Anodized Navy');
function getelem() {
var item = getElementsByText('Item | Anodized Navy');
...
}
您只需使用Jquery的
:contains()
如果要选择包含文本“mytext”的所有跨距,请使用
如果我帮了你,请注明答案
谢谢:)即使jQuery公开了:contains
伪选择器,最好先使用类来限制结果:
$('.market_listing_item_name:contains("Item | Anodized Navy")')
缩小要搜索的初始标记集可以提高性能,否则将考虑所有标记;此外,重叠标记也会匹配
在更现代的浏览器上,你可以考虑这一点,基于:
你想要这样的吗 HTML 输出
[span#result_6_name.market_listing_item_name, span#result_9_name.market_listing_item_name]
在
附加1,如我们所述
在
附加2,正如我们所讨论的getElementsByTagName('*')
函数getElementsByText(节点,文本){
var结果=[],
tags=node.getElementsByTagName('*'),
tagsLength=tags.length,
tagsIndex,
当前标签,
子节点,
儿童节长度,
ChildNodeIndex,
当前子节点;
对于(tagsIndex=0;tagsIndex包含的解决方案不同。因为这些解决方案实际上会将具有匹配文本节点的节点作为子节点。我使用的简单标记并没有演示这一点,但是当标记高度嵌套时,您很快就会注意到区别
最后,这里是这三种解决方案中的一种。也许我回答得晚了,但我没有看到用JQuery标记的问题,所以这里有一个纯JavaScript解决方案:
var myID = getElementsByTextContent('Item | Anodized Navy');
function getElementsByTextContent (elText){
var spanID;
var allSpans = document.getElementsByTagName("span");
for (var i = 0; i < allSpans.length; i++) {
var spanText = allSpans[i].innerHTML;
if(spanText == elText ){
spanID = allSpans[i].id;
}
}
return spanID;
}
var myID=getElementsByTextContent('Item |阳极氧化海军蓝');
函数getElementsByTextContent(elText){
var spanID;
var allspan=document.getElementsByTagName(“span”);
对于(var i=0;i
您需要获取文本节点的内容,并将其与所需字符串进行比较。然后你可以选择你想要的父节点。非常感谢你的评论,这是迄今为止最好的评论!但是,您知道没有jQuery的情况下有什么方法可以做到这一点吗?因为我认为tampermonkey支持jQuery,但它看起来不支持,所以我现在只能使用javascript,看起来是这样,除非我可以导入jQuery库或其他东西?非常感谢您的努力,我非常感谢!在给你最好的答案之前,我还有最后一个问题^^:我是否将(文本)替换为项目|阳极氧化海军蓝?我的意思是我是一个彻头彻尾的noob,所以我不清楚代码中的项目在哪里:)还有,点击它我指的是什么?是否使用跨距[0]。单击?再次感谢@user330404:不工作===最完整。。。无论如何,如果您在Firefox中进行测试,它将无法工作,因为FF不支持.innerText
。根据您支持的浏览器,可以使用span[i].textContent.indexOf(…
或(span[i].textContent | span[i].innerText.indexOf)(…
@cookiemonster啊,谢谢。我已经忘记了。更新为更兼容跨浏览器。现在,如果span的.textContent
是空字符串,它将使用。innerText
,可能是未定义的:)如果发生这种情况,您需要.textContent | | |.innerText | |'
。OP在稍后编辑问题以删除jquery标记:)为此,document.getElementsByTagName('*')
将使代码更加简单。是的,我使用了非常简单(不是嵌套的)此演示的标记。我很高兴您能够演示?我本可以使用treeWalker
,但此代码是跨浏览器的。使用getElementsByTagName('*')
也是跨浏览器的:)我并不是说它不是。:)我并没有说你做到了:)我的观点是滚动你自己的遍历代码很少是必要的。