У меня было трудное время с кросс-браузерной совместимостью и сменой dom. Я добавил отслеживание аналитики данных в транзакции электронной торговли, чтобы захватить продукт и сумму транзакции для каждой покупки.textContent Vs. innerText Cross Browser solution
Первоначально я использовал document.querySelectorAll('#someId')[0].textContent
, чтобы получить название продукта, и это работает отлично для каждого браузера, кроме интернет-исследователя.
Понадобилось некоторое время, чтобы выяснить, что это была часть .textContent
, которая вызывала проблемы.
Вчера я изменил .textContent
на .innerText
. Из анализа аналитики кажется, что проблема решена для того, но теперь 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'. –
Есть ли причина, по которой вы не просто используете библиотеку DOM-обертки, например jQuery? –
Близко относящийся: [Кросс-браузерный внутренний текст для значений уставок] (http://stackoverflow.com/q/11646398/1048572) – Bergi