Loading...
Yulia avatar Yulia 1346 Точки

Личи си, че те бива с операциите за стрингове :) Заимствах малко от тях за последната задачка в моето решение, но за втората си се престарал - половината написан код може да се замени с: 
"var element = document.querySelector(selector);"

: )

4
29/10/2014 21:33:02
Aleksiev avatar Aleksiev 133 Точки

Нарочно съм го направил без document.querySelector(selector), защото идеята ми е ако намери повече елементи да вземе този, който има childs, вместо първия срещнат.

0
Yulia avatar Yulia 1346 Точки

Хм, и все пак - тогава може да се вземат всички с "querySelectorAll" и после да се види кой има childs : )

2
Yulia avatar Yulia 1346 Точки

Ето и от мен малко решения - ще се старая и занапред да ги споделям по-рано, за да отговарям на въпроси и да обсъждаме добрите практики. Разбира се, ако имате забележки - приемам и тях : )

1. Function-Playground - GitHub
Използвала съм два вградени модула в Node.js за удобство - 'utils' за форматирането на стринговете и 'os' за новите редове, защото в linux/windows новият ред е различен символ в конзолата (и да - стартирайте решението с node.js). Иначе самото решение не е абсолютно нищо интересно, дори не съм се заигравала със скоуповете - смятам, че ги знам и разбирам добре. И без това задачата беше доста досадна и ми отне доста време да измисля какво да правя.

2. DOM-Traversal - GitHub
Максимално кратко и семпло. Може би не е най-елегантното решение де. Сигурно има и по-хитър начин за вземането на класовете и id-тата на елементите, но това е решението, до което стигнах. Забележете използването на .forEach как е направено - смятам, че това е най-правилният начин. 

3. DOM Manipulation - GitHub

4. Console Module - GitHub
Както правилно са забелязали колегите по-горе - в тази задача има само две неща реално за вършене: принтиране на "каквото е", или замяна на placeHolder-ите със следващите елементи в масива, без значение дали е 'Message', 'Error' или 'Warning'. Така, на всеки метод връщаме резултата от writeLine функцията. Мисля, че крайният резултат е доста изчистен и семпъл. Само, че се заиграх да си пиша тестове на тази задача сега, затова третата... няма да я кача скоро :D

9
04/11/2014 00:17:24
ttitto avatar ttitto 1153 Точки

Много ми хареса как си направила заместването в ConsoleModule. Само една забележка към всички домашни по-горе: сигурно ако се подадат по-малко на брой аргументи, отколкото са плейсхолдерите, клиентът няма да е доволен да види {1} (напр.) в изхода си. Мисля, че е редно да се провери за такова несъответствие и да се хвърля грешка. 

И една малка закачка - препоръка: Пробвайте да изписвате writeError и writeWarning с различен цвят на конзолата. При мен се получи доста красиво ;)

ПС. Относно вземането на ID та и класове при мен работи чудесно така: if(element.id){...} и за класа: if(node.classList.length>0) {...}

 

3
29/10/2014 21:48:39
Yulia avatar Yulia 1346 Точки

О, да. Благодаря за забележката. Минаха ми тези неща като идеи докато писах - да проверявам дали броя на placeholder-ите е същия като аргументите за тях ии да показвам цветно съобщенията, но те не са основното за сега :) Ще споделиш ли твоите решения или си притеснен заради случилото се на предния курс?

0
29/10/2014 21:49:22
ttitto avatar ttitto 1153 Точки

Ще споделям решенията си след изтичането на срока за предаване, защото ми омръзна да проверявам собствените си решения. 

Освен това ще проверявам домашни само тук във форума в знак на протест срещу неработещата система за проверяване.

5
29/10/2014 21:55:13
ZvetanIG avatar ZvetanIG 907 Точки

Митко в четвърта задача не си изпълнил напълно условието на задачата. И по-точно ето тази точка:

  • Writing to the console should call toString() to each element

Също така според мен трябва за съответните методи да използваш console.error() и console.warn().

А относно 2 и 3 задача виж как съм я направил и ще си отговориш на въпросите.

Ето и моя вариант на домашното

1. Function Playground

2. DOM Traversal

3. DOM Manipulation

4. Console Module

 

 P.S.  Употребявай разумно. Преписването е вредно за вашето обучение.

 

Споделям недоволството на Тито, но смятам, че има хора които имат нужда от нашите решения. Нямам предвид откровенните преписвачи. Аз в знак на протест срещу преписвачите реших да слагам предупредителни надписи, както на опаковките на цигарите.

 

14
02/11/2014 17:41:21
Kibork avatar Kibork 87 Точки

Благодаря за забележката, Цецо!

Ще си оправя решението на 4та и ще напиша 2ра и 3та!

Поздрави!

0
milen8204 avatar milen8204 296 Точки

Може ли някой да ми обясни защо ми ги дава всичките, че са тип стринг, а си подавам числа ?

function printCountAndTypeOFMyArguments() {
console.log("arguments length:" + arguments.length);

for (var argument in arguments) {
console.log(typeof argument);
}
}

printCountAndTypeOFMyArguments.call(null, 1, 2, 3, 4, 5);
printCountAndTypeOFMyArguments.apply(null, [1, 2, 3, 4, 5]);

 

 

0
milen8204 avatar milen8204 296 Точки

Обясних си, в JavaScript forecha ходи по ключовете, не по стойностите, а arguments е масив.

0
Kibork avatar Kibork 87 Точки

Заповядай една алтернативна възможност:

function printCountAndTypeOFMyArguments() {
    console.log("arguments length:" + arguments.length);

    var arrArguments = [];

    for(var i = 0; i < arguments.length; i++) {
        arrArguments[i] = arguments[i];
    }

    arrArguments.forEach(function(argument) {
        console.log(typeof argument);
    });
}

printCountAndTypeOFMyArguments.call(null, 1, 2, 3, 4, 5);
printCountAndTypeOFMyArguments.apply(null, [1, 2, 3, 4, 5]);

 

1. Правим обекта arguments на масив (arrArguments), понеже обекта няма forEach.

2. Обхождаме новополученият масив с forEach(function(item) {

    ...

});

 

Поздрави,

 

Димитър!

2
milen8204 avatar milen8204 296 Точки

Може ли малко помощ с това как да си тествам кода за втроа и трета задача, дали работи  върху index.html файла. Трябва ли да пиша скрипта, после да го вкарвам в html файла и да гледам дали работи през някой експлорер или някаква друга магия се прави :). Благодаря предварително.

0
Aleksiev avatar Aleksiev 133 Точки

Няма магия, просто си инклудваш js файла в index.html, отваряш го в браузъра и тестваш с различни селектори.

2
HPetrov avatar HPetrov 822 Точки

Сигурно са минали 2 века от последния път когато споделих моите решения на което и да е домашно. Та да се включа и аз този път пускам домашното си за разглеждане.

GitHub

Малко трудно ми беше да запаля пак за какво иде реч в JS понеже не съм го пипал последните 3 месеца и за това повзаимствах малко от тук-там, за което се извинявам предварително. Въпреки това решенията са изцяло адаптиране от моя гледна точка как бих ги решил :)

2
03/11/2014 13:50:38
Reath avatar Reath 188 Точки

Ето и моето домашно, ще се радвам на градивна критика и съвети :)

-- GitHub --

1
03/11/2014 17:42:29
Karlie avatar Karlie 438 Точки

С риск да стана за смях, моля за помощ. Правя си node.js проект в Netbeans или VS, няма значение (като ударих на камък пробвах и с HTML проект, пак не става). Слагам там index.html файла.  Правя нов DOMTraversal.js файл. В индекс файла слагам скрипт с път към DOMTraversal.js. файла.

Сега, ако в DOMTraversal.js напиша например console.log('Hi'), когато си отворя индекс файла и натисна ф12, на конзолата пише hi, тоест - вързани са. Когато обаче  в DOMTraversal започна да си решавам задачата, не намира никой елемент със съответното id (ако ползвам getElementById) или със съответния селектор (ако ползвам querySelector). В крайна сметка, реших да пробвам да пейстна директно някое от решенията тук в моя .js файл, например това на Юлия (вади ми ерор в конзолата на браузъра "Uncaught TypeError: Cannot read property 'nodeName' of null "), или това на Kibork (вади празна конзола).

Ако пейстна обаче решението на Юлия или Киборк в самата конзола на браузъра ми, в нея си се изписва очакваният от задачата output.

Не знам дали го обясних достатъчно добре...

Предварително благодаря за отговорите.

 

0
ttitto avatar ttitto 1153 Точки

Сигурен съм, че си си сложила <script> тага още в <head>а и търсиш елемент още преди да се е заредила страницата. Пробвай да го преместиш преди затварящия таг на бодито!

3
Karlie avatar Karlie 438 Точки

Тито, съжалявам, че няма емотиконка, която да изобрази състоянието ми в момента! Много ти благодаря за отговора, това е бил проблемът, който ми загуби цяла вечер, отивам да се самоубивам... ;)

1
Velichkov avatar Velichkov 87 Точки

Ето и моите решения. Признавам си, за втора ми трябваше малко помощ докато разбера, че може да се реши рекурсивно. :)

GitHub

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.