Учитывая содержимое 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>
Как можно извлечь Apple? - то есть первый класс сущностей, ближайший к type, который имеет значение Company Name.
Обновлено:
Без использования jQuery
Возможный дубликат Найти следующий родственный элемент в DOM с помощью JavaScript



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать querySelectorAll, чтобы получить все элементы .type, а затем проверить, совпадает ли текст с Company Name, а затем получить nextElementSibling
document.querySelectorAll('.type').forEach(el => {
let text = el.textContent;
if (text == 'Company Name') {
el.nextElementSibling.style.color = 'red'
}
})<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>просто используйте это:
document.querySelector("type").nextSibling;
Это приводит к узлу, содержащему «Боб».
@HereticMonkey, потому что он не упомянул, в каком случае он хотел это сделать. может быть this.nextSibling; или что-то еще
Но это не то, что у вас есть. У вас есть document; что делает контекст документом. Поэтому querySelector выберет первый элемент, который соответствует селектору в порядке документа. Собственно, в этом случае ничего не будет совпадать, так как элементов type нет.
Вы можете использовать это, чтобы получить карту типа-сущности:
const mapping = Object.assign(...Array.from(document.querySelectorAll(".type + .entity"), ({previousElementSibling: {textContent: type}, textContent: entity}) => ({[type]: entity})));
console.info(mapping); // { "First Name": "Bob", "Company Name": "Apple", Phone: "800.555.5555" }
console.info(mapping["Company Name"]); // "Apple"
Это работает, если взять textContent каждого .entity, которому предшествует .type, и взять textContent их previousElementSibling. Параметр вложенной деструктуризации переименовывает textContent узлов .type в type и textContent узлов .entity в entity, чтобы создать объект {[type]: entity} для каждой пары <span>. Наконец, Object.assign объединяет все объекты в один.
Это наиболее лаконичное и полное решение.
Вы можете использовать jQuery .next () а потом просто позвони
$('.type').next().text();
чтобы получить текст в виде строки
@Xufox Я сделал свой ответ перед он редактировал вопрос.
@AdanSandoval Вы ответили 4 минуты назад, а вопрос был отредактирован 9 минут назад.
ТАК асинхронен: спорить о нескольких минутах глупо. Вопросы можно редактировать в процессе ответа. Неважно.
Вы можете получить это, найдя все элементы .type, затем перебрав их в цикле и проверив nextElementSibling, чтобы убедиться, что это Спички.entity
Array.from(document.querySelectorAll('.type')).forEach(el => {
let next = el.nextElementSibling
if (el.textContent == 'Company Name' && next.matches('.entity')) {
console.info(next.textContent)
}
})<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>Если для типа всегда есть соответствующая сущность, следующее решение является жизнеспособным. Идея состоит в том, чтобы предварительно выбрать элементы, а затем перебрать их в цикле, и, если совпадение найдено, получить соответствующую сущность из другой коллекции и изменить ее цвет.
var types = document.querySelectorAll('.type');
var entities = document.querySelectorAll('.entity');
for (var i = 0; i < types.length; i++) {
if (types[i].textContent === 'Company Name') {
entities[i].style.color = 'Red';
break;
}
}<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>Я добавил функцию, которая будет фильтровать сущность с типом в качестве ключа
<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.info(entity.outerText)
}
}
}
filterData("Company Name")
</script>
Пожалуйста, покажите, какое исследование вы провели, и какой код вы пробовали. Такое ощущение, что вы просите добровольцев, которые отвечают на вопросы Stack Overflow, сделать вашу работу за вас, что нехорошо.