Как заставить класс принять метод без указания метода заранее? - PullRequest
1 голос
/ 21 июля 2011

Если у меня есть что-то вроде этого:

function foo(class){
    for(i=0; i<(class.length);i++){
       return document.getElementsByClassName(class)[i];
    }
}

А теперь я хочу сделать что-то вроде этого:

 foo("someclass").innerHTML="something";

это будет сделано только для первого элемента, и я понимаю, почему это происходит и как заставить его работать правильно, но как я могу заставить функцию получать другие методы, не сообщая ей в цикле, что именно делать, как это

   foo("someclass").innerHTML="something";//this to put something inside the element
   foo("someclass").style.backgroundColor="#000");// and this to work also

Итак, если это возможно, как я могу заставить функцию делать это, не помещая эти методы в цикл функции foo? Есть ли способ поместить эти методы в переменную, подобную этой

  function foo(class).variableMethod{
for(i=0; i<(class.length);i++){
   document.getElementsByClassName(class)[i].variableMethod;
}

}

Возможно ли это?

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Вы можете передать функцию в foo(), и foo() вызвать эту функцию с каждым соответствующим элементом:

function foo(className, func)
{
    var elements = document.getElementsByClassName(className);
    for (var i = 0; i < elements.length; ++i) {
        func(elements[i]);
    }
}

Теперь вы можете сделать что-то вроде:

foo("someclass", function(element) {
    element.innerHTML = "something";
    element.style.backgroundColor = "#000";
});
1 голос
/ 21 июля 2011

Просто добавьте к другим отличным ответам здесь, одну вещь, которую вы могли бы сделать, это создать метод переопределения с именем innerHtml.Затем вы можете проверить innerHtml для коллекции, а также для отдельного экземпляра и при необходимости работать.

UPDATE

Вот краткий пример объединения методов.Здесь я в основном получаю коллекцию элементов на основе имени тега и устанавливаю их значение с помощью метода val (), который я создал с помощью объекта Javascript prototype.

function Foo(tagName)
{
    this.collection = document.getElementsByTagName(tagName);
    return this;
}

Foo.prototype.val= function(value){

   for(var i = 0; i < this.collection.length; i++)
   {
       this.collection[i].innerHTML = value;
   }
}


var x = new Foo("li").val("Hello World");

Вы можете увидеть рабочую демонстрацию этогоздесь: http://jsfiddle.net/E48ym/1/

0 голосов
/ 21 июля 2011

Ответ Фредерика Хамиди будет делать то, что вы хотите, я думаю, но вы также можете использовать фреймворк, такой как jQuery - для этого он и предназначен.Таким образом, вы можете сделать:

$('.className').text('something');

, чтобы установить текст всех элементов с классом className в что-то , или

$('.className').css('background-color', '#000');

, чтобы изменитьцвет фона всех элементов с классом className.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...