如何提取;“最近邻居”;使用javascript的文本?
给定如下HTML内容:如何提取;“最近邻居”;使用javascript的文本?,javascript,Javascript,给定如下HTML内容: <span class="type">First Name</span> <span class="entity">Bob</span> <span class="type">Company Name</span> <span class="entity">Apple</span> <span class="type">Phone</span> &l
<span class="type">First Name</span>
<span class="entity">Bob</span>
<span class="type">Company Name</span>
<span class="entity">Apple</span>
<span class="type">Phone</span>
<span class="entity">800.555.5555</span>
名字
上下快速移动
公司名称
苹果
电话
800.555.5555
如何提取苹果公司的i、 e.第一个最接近类型
的实体类,其值为公司名称
编辑:
在不使用jQuery的情况下您可以使用querySelectorAll
获取所有。键入元素,然后检查文本是否等于公司名称
,然后获取nextElementSibling
document.querySelectorAll('.type').forEach(el=>{
让text=el.textContent;
如果(文本==“公司名称”){
el.nextElementSibling.style.color='red'
}
})
名字
上下快速移动
公司名称
苹果
电话
800.555.5555
只需使用以下命令:
document.querySelector("type").nextSibling;
您可以使用它来获取类型-实体映射:
const mapping = Object.assign(...Array.from(document.querySelectorAll(".type + .entity"), ({previousElementSibling: {textContent: type}, textContent: entity}) => ({[type]: entity})));
console.log(mapping); // { "First Name": "Bob", "Company Name": "Apple", Phone: "800.555.5555" }
console.log(mapping["Company Name"]); // "Apple"
这是通过获取前面有的每个实体的textContent
,键入,并获取其以前的同级元素的textContent
。嵌套的解构参数将.type
节点的textContent
重命名为type
,将.entity
节点的textContent
重命名为entity
,以便为每对
创建一个{[type]:entity}
对象。最后,Object.assign
将所有对象合并为一个对象。您可以使用
然后打电话
$('.type').next().text();
要获取字符串形式的文本,可以通过查找所有.type
元素,然后循环遍历它们并检查是否为.entity
Array.from(document.querySelectorAll('.type')).forEach(el=>{
设next=el.nextElementSibling
如果(el.textContent=='Company Name'&&next.matches('.entity')){
console.log(next.textContent)
}
})
名字
上下快速移动
公司名称
苹果
电话
800.555.5555
如果类型始终存在匹配实体,则以下是可行的解决方案。其思想是预先获取元素,然后循环类型,如果找到匹配项,则从另一个集合中获取相应的实体并更改其颜色
var-types=document.querySelectorAll('.type');
var entities=document.querySelectorAll('.entity');
对于(变量i=0;i
名字
上下快速移动
公司名称
苹果
电话
800.555.5555
我添加了一个函数,该函数将过滤类型为key的实体
<span class="type">First Name</span>
<span class="entity">Bob</span>
<span class="type">Company Name</span>
<span class="entity">Apple</span>
<span class="type">Phone</span>
<span class="entity">800.555.5555</span>
<script>
var filterData = function(type){
var typeData = document.getElementsByClassName('type')
for(i=0;i<typeData.length;i++){
if(typeData[i].outerText == type ){
var entity = typeData[i].nextSibling.nextElementSibling
console.log(entity.outerText)
}
}
}
filterData("Company Name")
</script>
名字
上下快速移动
公司名称
苹果
电话
800.555.5555
变量filterData=函数(类型){
var typeData=document.getElementsByClassName('type')
对于(i=0;i请显示您所做的研究和您尝试过的任何代码。感觉您是在让回答堆栈溢出问题的志愿者为您做工作,这不好。此结果可能在包含“Bob”的节点中重复@HereticMonkey,因为他没有提到他想在哪种情况下这样做。可以是this.nextSibling;也可以是whateverb,但这不是您拥有的。您拥有文档;这使得上下文成为文档。因此querySelector
将选择与文档顺序中的选择器匹配的第一个元素。实际上,在这种情况下由于不存在类型
元素,因此将不匹配任何内容。虽然这可能会回答问题,但最好添加一些说明,说明此答案如何帮助解决问题。请阅读了解更多信息。“不使用jQuery”.@Xufox在他编辑问题之前我已经做了回答。@AdanSandoval你4分钟前回答了,问题9分钟前被编辑了。所以是异步的:争论几分钟是愚蠢的。问题可能在回答过程中被编辑。没关系。这是最简洁和完整的解决方案。