Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2015, 00:30
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

отфильтровать DOM = элементы
Привет! Как отфильтровать нужные элементы? Чтобы возвращало только элементы-потомки, соответствующие селектору?
_init_.prototype.childrenFilter = function(el) {
    var kids = [];
    for (var i = 0; i < this.s.length; i++) {
        for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
            if (c.nodeType === 1) kids.push(c);
    }
    var filterKids = [];
    for(var i = 0; i < kids.length; i++){
        if(_A_(el) == _A_(kids[i])){
        filterKids.push[kids[i]];
        console.log(filterKids[i])
        }  
        //for(; i<filterKids.length; i++)
        //this.s[i] = filterKids[1];
    }
    return _A_(filterKids);
}
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2015, 01:29
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

В современных браузерах есть matches/matchesSelector. С остальными придётся посношаться.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2015, 02:13
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

sash003,
Приведите HTML код к данному скрипту (сломаешь глаза разбираться) и краткое описание нужных деяний
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2015, 02:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

sash003,
_init_.prototype.childrenFilter = function(el) {
    var kids = [];
    for (var i = 0; i < this.s.length; i++) {
        var arr = Array.prototype.map.call(this.s[i].querySelectorAll(el), function(el) {
            return el
        });
        for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
            if (c.nodeType === 1 && arr.indexOf(c) != -1) kids.push(c);
    }
   return _A_(kids) ;// подумай что делать если массив пустой
}
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2015, 02:26
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Не верю я в нужность такой структуры, хорошо б узнать задачу и HTML
Ибо тут сосед унитаз к полу приклеивал жидкой сваркой несколько часов, кады он на два болта ставится за десять мин с хорошей дрелью
Ответить с цитированием
  #6 (permalink)  
Старый 11.07.2015, 02:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Deff,
собирал по кускам творения sash003, может у него иной комплект. нажимать кнопку показать не рекомендуется для душевного спокойствия.

<!DOCTYPE HTML>



<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <style type="text/css">
   a{

     height: 50px;
     background-color: #0000CC;
     color: rgb(153, 255, 255);
      font-size: 28pt;
   }

   </style>
</head>

<body>
 <p>
<a href="#">рррррррр</a></p><br><div><a href="#">рррррррр</a></div><div><a href="#">рррррррр</a><a href="#">рррррррр</a></div>
<script>
function _init_(el){

       this.s = typeof el == "string" ? document.querySelectorAll(el) : el.length ? el : [el];

   }

 // главная и самая сложная функшн
 function _A_(el){
     return new _init_(el)
 }

_init_.prototype.css = function(obj){
    if(typeof obj === 'object'){
     for (var e = 0; e < this.s.length; e++){
         for (i in obj){
         this.s[e].style[i] = obj[i];
     }
     }
     return this;
    }
    else {
        if(obj === 'width') return this.s[0].offsetWidth;
        if(obj === 'height') return this.s[0].offsetHeight
        else return this.s[0].style[obj] || getComputedStyle(this.s[0])[obj];
    }
}

_init_.prototype.attr = function(){

}

_init_.prototype.slideUp = function (duration){
   var self = this;
   this.css({'overflow' : 'hidden'});
   var height = parseInt(this.css('height'));
   for(var  i = 1; i <= height ; i++){
       (function(i){
          setTimeout(function(){
                    self.css({'height' : (height-i)+'px'});  // this.css is not a function. хотя overflow устанавливает перед этим
          }, i*duration/height);
       })(i);
    }
    return this;
}
// установка обработчиков
_init_.prototype.on = function(event, func, param){
    for(var i = 0; i < this.s.length; i++){
        addEvent(this.s[i], event, func, param);
    }
}

_init_.prototype.html = function(html){
     for(var i = 0; i < this.s.length; i++){
        this.s[i].innerHTML = html
    }
}
function addEvent(elem, type, handler, param){
    param = param || false;
    handler.bind(elem)
  if(elem.addEventListener){
    elem.addEventListener(type, handler, param);
  } else {
    elem.attachEvent('on'+type, handler);
  }
  return false;
}
function fn(n)
{

    return function() {
       _A_(this).css({'backgroundColor' : 'red'})
       _A_(this).html(n++); // чтобы так можно было делать

}

}
_init_.prototype.children = function() {
    var kids = [];
    for (var i = 0; i < this.s.length; i++) {
        for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
            if (c.nodeType === 1) kids.push(c);
    };
    return _A_(kids);
}
_init_.prototype.childrenFilter = function(el) {
    var kids = [];
    for (var i = 0; i < this.s.length; i++) {
        var arr = Array.prototype.map.call(this.s[i].querySelectorAll(el), function(el) {
            return el
        });
        for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
            if (c.nodeType === 1 && arr.indexOf(c) != -1) kids.push(c);
    }
   return _A_(kids) ;
}


   _A_('body').childrenFilter('div').css({'backgroundColor' : 'red'}).html('hhhh')

//var x = _A_("p");

//x.slideUp(1000)
</script>
</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 11.07.2015, 09:46
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

а можно мне объяснить зачем вобще нужно делать через прототипы?
почуме делают так
*!*_init_.prototype.on*/!* = function(event, func, param){
	    for(var i = 0; i < this.s.length; i++){
	        addEvent(this.s[i], event, func, param);
	    }
	}

а не так?
*!*_init_.on*/!* = function(event, func, param){
	    for(var i = 0; i < this.s.length; i++){
	        addEvent(this.s[i], event, func, param);
	    }
	}
Ответить с цитированием
  #8 (permalink)  
Старый 11.07.2015, 09:48
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от KosBeg
почуме делают так
такую ошибку даже грех исправлять
Ответить с цитированием
  #9 (permalink)  
Старый 11.07.2015, 10:43
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

рони,
Как всегда, работает! Благодарю Я б в жизни не додумался
Ответить с цитированием
  #10 (permalink)  
Старый 11.07.2015, 11:03
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

Сообщение от KosBeg
зачем вобще нужно делать через прототипы?
Если я правильно понял, то для того, чтобы не создавать сразу свойства, а чтобы они искались в прототипе по мере необходимости
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вернуть div и все вложенные в него элементы в первоначальное состояние? lucky89 Общие вопросы Javascript 17 26.02.2015 18:41
как программно масштабировать элементы DOM ? Dabonirc Общие вопросы Javascript 4 27.08.2014 19:01
js-фреймворк, связывающий css классы и dom элементы Danxil Оффтопик 12 30.03.2014 18:41
инициализация плагинов до вставки html-я в DOM FanAizu jQuery 3 19.01.2014 01:16
Обернуть все элементы, до определённого элемента dom majahead jQuery 6 30.03.2011 18:15