Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提取;“最近邻居”;使用javascript的文本?_Javascript - Fatal编程技术网

如何提取;“最近邻居”;使用javascript的文本?

如何提取;“最近邻居”;使用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

给定如下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>
<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分钟前被编辑了。所以是异步的:争论几分钟是愚蠢的。问题可能在回答过程中被编辑。没关系。这是最简洁和完整的解决方案。