У меня были проблемы с кросс-браузерной совместимостью и отказом от файла dom. Я добавил отслеживание аналитики данных для транзакций электронной торговли, чтобы получить информацию о продукте и сумме транзакции для каждой покупки.
Первоначально я использовал document.querySelectorAll('#someId')[0].textContent
для получения названия продукта, и это нормально работало для всех браузеров, кроме Internet Explorer.
Потребовалось некоторое время, чтобы понять, что именно часть .textContent
вызывает проблемы с ie.
Вчера поменял .textContent
на .innerText
. Глядя внутрь аналитики, кажется, что проблема была решена для ie, но теперь Firefox не работает.
Я надеялся найти решение без написания оператора if для проверки функциональности .textContent
или .innerText
.
Существует ли кроссбраузерное решение .getTheText
?
Если нет, то что было бы лучшим способом обойти это? Есть ли простое решение? (спрашиваю, учитывая мои знания и опыт написания скриптов, который ограничен)
** добавлены следующие комментарии ** Если это мой блок кода:
// build products object
var prods = [];
var brand = document.querySelectorAll('.txtStayRoomLocation');
var name = document.querySelectorAll('.txtStayRoomDescription');
var price = document.querySelectorAll('.txtStayRoomSplashPriceAmount');
for(var i = 0; i < brand.length; i++) {
//set granular vars
var prd = {};
//add to prd object
prd.brand = brand[i].innerText;
prd.name = name[i].innerText;
prd.price = price[i].innerText;
prd.quantity = window.session_context_vars.BookingContext.Booking.ReservationLineItems[i].ReservationCharges.length/2;;
//add to prods array
prods.push(prd);
}
Тогда, если я понимаю синтаксис из комментариев и вопрос, связанный с комментарием, это то, что я должен делать:
// build products object
var prods = [];
var brand = document.querySelectorAll('.txtStayRoomLocation');
var name = document.querySelectorAll('.txtStayRoomDescription');
var price = document.querySelectorAll('.txtStayRoomSplashPriceAmount');
for(var i = 0; i < brand.length; i++) {
//set granular vars
var prd = {};
//add to prd object
prd.brand = brand[i].textContent || brand[i].innerText;
prd.name = name[i].textContent || name[i].innerText;
prd.price = price[i].textContent || price[i].innerText;
prd.quantity = window.session_context_vars.BookingContext.Booking.ReservationLineItems[i].ReservationCharges.length/2;;
//add to prods array
prods.push(prd);
}
Таким образом, использование или с двойной чертой ||
присваивает первое ненулевое значение?
element.textContent || element.innerText
. - person Josh Crozier   schedule 25.04.2015