Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция-селектор наподобие jQuery (https://javascript.ru/forum/misc/30093-funkciya-selektor-napodobie-jquery.html)

shoo 23.07.2012 23:18

Функция-селектор наподобие jQuery
 
Я не очень хорошо разбираюсь в JavaScript и не могу пока разобраться в сложном для меня коде jQuery. Интересует такой вопрос, как сделать функцию-селектор по аналогии с jQuery и Prototype. Пример, хочу своим способом сделать show/hide элемента.

<div id="errorBar" onclick="selectElement(this).hide()">


Создаю функцию:
function selectElement(element) {
    this.hide = function () {
        element.style.display = 'none';
    }
}


Но консоль выдаёт ошибку:
[23:09:05.005] TypeError: selectElement(this) is undefined

Что я делаю не так и как сделать правильно? Пожалуйста, помогите.

9xakep 24.07.2012 02:00

просто напиши:
<div onclick="this.style.display = 'none'">123</div>

9xakep 24.07.2012 02:04

и то, что вы написали, так нельзя, вы сделали ф-ию конструтор:
function Parent() {
this.hide = function () { 
alert('hide')
 }
}
var child = new Parent()
child.hide() 
try {  
// но, 
Parent.hide() 
// не сработает
} catch (e) { 
alert('не сработало')
}

devote 24.07.2012 04:26

<div id="errorBar" onclick="(new selectElement(this)).hide()">123</div>
<script>
function selectElement(element) {
    this.hide = function () {
        element.style.display = 'none';
    }
}
</script>

shoo 24.07.2012 10:14

Не совсем то. Мне нужна функция-обёртка, которую можно использовать с любым DOM-объектом, не создавая при этом каких-то лишних экземпляров.

devote 24.07.2012 10:28

<div id="errorBar" onclick="selectElement(this).hide()">123</div>
<script>
function selectElement( elem ) {
    return new selectElement.prototype.init( elem );
}
selectElement.prototype = {
    constructor: selectElement,
    length: 0,
    init: function( elem ) {
        this[0] = elem;
        this.length = 1;
        return this;
    },
    hide: function() {
        var elem, i = this.length;
        for( ;elem = this[ --i ]; ) {
             elem.style.display = 'none';
        }
        return this;
    }
}
selectElement.prototype.init.prototype = selectElement.prototype;
</script>

nerv_ 24.07.2012 10:32

Цитата:

Сообщение от shoo
Мне нужна

нужна? Напиши! Ты вообще представляешь, что такое качественный кросс-барузерный селектор? Думаю, нет. А devote такой написал. Если он будет в хорошем настроении, может дать ссылку )

devote 24.07.2012 11:09

Цитата:

Сообщение от shoo
не создавая при этом каких-то лишних экземпляров.

для этих целей вам 9xakep, привел пример в первом своем посте. Там никаких экземпляров не создается. В других случаях они все равно будут создаваться.

Цитата:

Сообщение от nerv_
может дать ссылку )

а что ее давать то? она и так есть в каждом моем посте в подписи.

Dim@ 24.07.2012 12:34

<div id='div'>lol</div>
<script type='text/javascript'>
Object.prototype.hide = function (){
 var prot = this + '';
 if (/\w?\ HTML\w?/img.test(prot) == true) this.style.display = 'none';
 else if (console) console.log("Ошибка");
};
setTimeout(function(){document.getElementById('div').hide();}, 3000)
</script>

devote 24.07.2012 12:37

Цитата:

Сообщение от Dim@
Object.prototype.hide = function (){

очень плохое решение, не рекомендуется совать в стандартные прототипы объектов всякий мусор..


Часовой пояс GMT +3, время: 11:43.