Вход

Просмотр полной версии : Заменить getElementById на getElementsByClassName


samdo
05.03.2020, 07:53
Приветствую! Подскажите как правильно заменить getElementById на getElementsByClassName в нижеуказанном скрипте. Это скрипт GDPR Cookie, который имеет 2 кнопки (1-принять и 2-закрыть). Они обе должны срабатывать одинаково, однако, мы знаем, что не бывает одинаковый ID у двух элементов на странице, поэтому хотелось бы заменить id на class.
(function(){
"use strict";

window.FS = window.FS || {};
window.FS.GDPR = window.FS.GDPR || {};

//setup hook for when accept is clicked
var onAcceptCbs = [];
window.FS.GDPR.onAccept = function(cb){
onAcceptCbs.push(cb);
};

//get the banner
var banner = document.getElementById('GdprCookieBanner');
var acceptButton = document.getElementById('GdprCookieBannerAccept');
acceptButton.onclick = function(event){
//save the acceptance cookie
var d = new Date();
d.setTime(d.getTime() + (365*24*60*60*1000));

//figure out the domain
var cookieDomain = window.location.hostname;
var domainParts = cookieDomain.split('.');
var firstPart = domainParts[0];

if( !isNumeric(firstPart) && (cookieDomain.indexOf("local")<0) && (domainParts.length > 1) ){
cookieDomain = '.' + domainParts.slice(domainParts.length -2).join('.');
}

//actually save the cookie value
document.cookie = 'gdprAccepted=true;path=/;expires=' + d.toUTCString() + ';domain='+cookieDomain;
banner.style.display = "none";

//trigger any callbacks that have registered for when accept is clicked
onAcceptCbs.forEach(function(cb){
cb();
});

//mark that it's been accepted
window.FS.GDPR.accepted = true;

//stops the click
return false;
};

if(document.cookie.indexOf('gdprAccepted=true') < 0){
//cookie not found. show banner
banner.style.display = "block";

//mark that we don't have acceptance
window.FS.GDPR.accepted = false;
}else{
//mark that
window.FS.GDPR.accepted = true;
}

function isNumeric(item){
return !isNaN(parseFloat(item)) && isFinite(item);
}

})();

Спасибо! :)

ksa
05.03.2020, 09:19
как правильно заменить getElementById на getElementsByClassName
Результат, возвращаемый getElementsByClassName(), является коллекцией. Если у тебя два элемента с нужным классом, к ним можно обращаться в цикле или вот так
<button class='test'>Item</button>
<button class='test'>Item</button>
<script>
var o=document.getElementsByClassName('test');
o[0].innerHTML='Item 0';
o[1].innerHTML='Item 1';
</script>

samdo
09.03.2020, 22:23
Можно попросить связать это с кодом, который указан в первом посте? А то не понятно что там на что заменить.

samdo
14.03.2020, 11:11
Please :)

voraa
14.03.2020, 11:36
Можно не менять на на getElementsByClassName

(function(){
"use strict";

window.FS = window.FS || {};
window.FS.GDPR = window.FS.GDPR || {};

//setup hook for when accept is clicked
var onAcceptCbs = [];
window.FS.GDPR.onAccept = function(cb){
onAcceptCbs.push(cb);
};

const handler = function(event){
//save the acceptance cookie
var d = new Date();
d.setTime(d.getTime() + (365*24*60*60*1000));

//figure out the domain
var cookieDomain = window.location.hostname;
var domainParts = cookieDomain.split('.');
var firstPart = domainParts[0];

if( !isNumeric(firstPart) && (cookieDomain.indexOf("local")<0) && (domainParts.length > 1) ){
cookieDomain = '.' + domainParts.slice(domainParts.length -2).join('.');
}

//actually save the cookie value
document.cookie = 'gdprAccepted=true;path=/;expires=' + d.toUTCString() + ';domain='+cookieDomain;
banner.style.display = "none";

//trigger any callbacks that have registered for when accept is clicked
onAcceptCbs.forEach(function(cb){
cb();
});

//mark that it's been accepted
window.FS.GDPR.accepted = true;

//stops the click
return false;
};

//get the banner
var banner = document.getElementById('GdprCookieBanner');
var acceptButton = document.getElementById('GdprCookieBannerAccept');

acceptButton.onclick = handler;
baner.onclick = handler;

if(document.cookie.indexOf('gdprAccepted=true') < 0){
//cookie not found. show banner
banner.style.display = "block";

//mark that we don't have acceptance
window.FS.GDPR.accepted = false;
}else{
//mark that
window.FS.GDPR.accepted = true;
}

function isNumeric(item){
return !isNaN(parseFloat(item)) && isFinite(item);
}

})();

samdo
15.03.2020, 20:20
Спасибо! Но cookies теперь не запоминаются( после перезагрузки страницы опять сообщение о cookies отображается.