Вы можете получить назначения из атрибута itemprop.
примерно так:
function getItemPropsAsJSON(){
var ob = {};
Array.from(document.getElementsByTagName('span')).forEach(el=> {
var key = el.getAttribute('itemprop');
var val = el.innerText;
if (key && val) ob[key] = val;
});
return ob;
}
/* expected output:
{
"name": "Jorge Garcia - Co-Founder & Chief Technology Officer, ICONIC | Contact Information, Email Address, Phone Number, Budgets and Responsibilities",
"email": "j****@***********.com",
"telephone": "(347) ***-****",
"streetAddress": "177 East West Colorado Boulevard",
"addressLocality": "Pasadena",
"addressRegion": "CA",
"postalCode": "91195",
"addressCountry": "USA"
}
*/
Возможно, вы захотите нормализовать ключи, если будете использовать это где-то еще, поскольку атрибуты itemprop не всегда преобразуются в идеальный формат записи объекта. Для этого используйте следующее:
function normalizeObjectNotation(key){
return key && typeof key == 'string' && /[A-Z]/.test(key) && /\W+/.test(key) == false
? key.trim().split(/(?=[A-Z])/).reduce((a,b)=> a+'_'+b).replace(/^\d+/, '').toLowerCase()
: key && typeof key == 'string' ? key.trim().replace(/\W+/g, '_').replace(/^\d+/, '').toLowerCase()
: 'failed_object';
}
function getItemPropsAsJSON(){
var ob = {};
Array.from(document.getElementsByTagName('span')).forEach(el=> {
var key = el.getAttribute('itemprop');
var val = el.innerText;
if (key && val) ob[normalizeObjectNotation(key)] = val;
});
return ob;
}
getItemPropsAsJSON()
/* Expected Output:
{
"name": "Jorge Garcia - Co-Founder & Chief Technology Officer, ICONIC | Contact Information, Email Address, Phone Number, Budgets and Responsibilities",
"email": "j****@***********.com",
"telephone": "(347) ***-****",
"street_address": "177 East West Colorado Boulevard",
"address_locality": "Pasadena",
"address_region": "CA",
"postal_code": "91195",
"address_country": "USA"
}
*/