renovations
This commit is contained in:
parent
4b8b168fd2
commit
c7d4c7e3ff
172 changed files with 869 additions and 244 deletions
|
@ -0,0 +1,11 @@
|
|||
function addClass(obj, cls) {
|
||||
var classes = obj.className ? obj.className.split(' ') : [];
|
||||
|
||||
for(var i=0; i<classes.length; i++) {
|
||||
if (classes[i] == cls) return; // класс уже есть
|
||||
}
|
||||
|
||||
classes.push(cls); // добавить
|
||||
|
||||
obj.className = classes.join(' '); // и обновить свойство
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
describe("addClass", function() {
|
||||
|
||||
it("добавляет класс, которого нет", function() {
|
||||
var obj = { className: 'open menu' };
|
||||
addClass(obj, 'new');
|
||||
assert.deepEqual(obj, {
|
||||
className: 'open menu new'
|
||||
});
|
||||
});
|
||||
|
||||
it("не добавляет класс, который уже есть", function() {
|
||||
var obj = { className: 'open menu' };
|
||||
addClass(obj, 'open');
|
||||
assert.deepEqual(obj, {
|
||||
className: 'open menu'
|
||||
});
|
||||
});
|
||||
|
||||
it("не добавляет лишних пробелов, который уже есть", function() {
|
||||
var obj = { className: '' };
|
||||
addClass(obj, 'open');
|
||||
assert.deepEqual(obj, {
|
||||
className: 'open'
|
||||
});
|
||||
});
|
||||
|
||||
});
|
|
@ -0,0 +1,28 @@
|
|||
Решение заключается в превращении `obj.className` в массив при помощи `split`.
|
||||
После этого в нем можно проверить наличие класса, и если нет - добавить.
|
||||
|
||||
```js
|
||||
//+ run
|
||||
function addClass(obj, cls) {
|
||||
var classes = obj.className ? obj.className.split(' ') : [];
|
||||
|
||||
for(var i=0; i<classes.length; i++) {
|
||||
if (classes[i] == cls) return; // класс уже есть
|
||||
}
|
||||
|
||||
classes.push(cls); // добавить
|
||||
|
||||
obj.className = classes.join(' '); // и обновить свойство
|
||||
}
|
||||
|
||||
var obj = { className: 'open menu' };
|
||||
|
||||
addClass(obj, 'new');
|
||||
addClass(obj, 'open');
|
||||
addClass(obj, 'me');
|
||||
alert(obj.className) // open menu new me
|
||||
```
|
||||
|
||||
P.S. "Альтернативный" подход к проверке наличия класса вызовом `obj.className.indexOf(cls)` был бы неверным. В частности, он найдёт `cls = "menu"` в строке классов `obj.className = "open mymenu"`.
|
||||
|
||||
P.P.S. Проверьте, нет ли в вашем решении присвоения `obj.className += " " + cls`. Не добавляет ли оно лишний пробел в случае, если изначально `obj.className = ""`?
|
23
1-js/4-data-structures/8-array-methods/1-add-class/task.md
Normal file
23
1-js/4-data-structures/8-array-methods/1-add-class/task.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Добавить класс в строку
|
||||
|
||||
[importance 5]
|
||||
|
||||
В объекте есть свойство `className`, которое содержит список "классов" - слов, разделенных пробелом:
|
||||
|
||||
```js
|
||||
var obj = {
|
||||
className: 'open menu'
|
||||
}
|
||||
```
|
||||
|
||||
Создайте функцию `addClass(obj, cls)`, которая добавляет в список класс `cls`, но только если его там еще нет:
|
||||
|
||||
```js
|
||||
addClass(obj, 'new'); // obj.className='open menu new'
|
||||
addClass(obj, 'open'); // без изменений (класс уже существует)
|
||||
addClass(obj, 'me'); // obj.className='open menu new me'
|
||||
|
||||
alert(obj.className); // "open menu new me"
|
||||
```
|
||||
|
||||
P.S. Ваша функция не должна добавлять лишних пробелов.
|
Loading…
Add table
Add a link
Reference in a new issue