jQuery: имя объекта jquery в виде строки? - PullRequest
0 голосов
/ 14 июля 2011

Я написал функцию, которая принимает строку в качестве входных данных.

function ajaxLoad(targetBox, loadUrl) {
   $("div." + targetBox).css("opacity",0.25);
}

поэтому обычно я вызываю эту функцию следующим образом.ajaxLoad("commentListBox", "some url");

Однако сейчас у меня проблема в том, что мне нужно передать объект, который я извлекаю через родительский селектор.так что это не строка, а объект.

var box = $(this).parent().parent().toString();
ajaxLoad(box, "some url"); // is a syntax error

Как я могу справиться с этим?

, если я console.log(box);, он говорит [ОБЪЕКТ]

Ответы [ 5 ]

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

Поскольку вы используете имя класса в селекторе, вы получите имя класса из элемента:

var box = $(this).parent().parent().attr('className');

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

function ajaxLoad(targetBox, loadUrl) {
  if (typeof targetBox !== 'object') targetBox = $("div." + targetBox);
  targetBox.css("opacity", "0.25");
}

Использование:

ajaxLoad($(this).parent().parent(), "some url");

Если вы используете только функцию для этого, вы можете просто пропустить первую строку в функции, чтобы она принимала только объект jQUery.

Примечание: вы должны использовать строку "0.25" вместо числа 0.25 при установке стиля непрозрачности. Число будет преобразовано в строку, а в некоторых локалях оно будет преобразовано в "0,25" вместо "0.25".

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

Не могли бы вы немного изменить свою функцию для обработки передачи ей объекта?

Итак, если вы проверите, к какому типу относится targetBox, и обработаете его соответствующим образом:

function ajaxLoad(targetBox, loadUrl) {
   var el = "";

   if(typeof(targetBox) === "object") el = targetBox;
   else el = "div." + targetBox;

   $(el).css("opacity",0.25);
}

и затем при вызове функции просто передайте элемент:

var box = $(this).parent().parent();
ajaxLoad(box, "some url");

Бонус, используйте сокращение, если для меньшего кода:

function ajaxLoad(targetBox, loadUrl) {
   var el = typeof(targetBox) === "object" ? targetBox : "div." + targetBox;
   $(el).css("opacity",0.25);
}
0 голосов
/ 14 июля 2011

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

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

Если вы используете class, попробуйте:

var box = $(this).parent().parent()[0].className;
ajaxLoad(box, "some url");

Если Id, попробуйте:

function ajaxLoad(targetBox, loadUrl) {
   $("div#" + targetBox).css("opacity",0.25);
}

var box = $(this).parent().parent()[0].id;
ajaxLoad(box, "some url");
0 голосов
/ 14 июля 2011

Вы можете проверить тип 'targetBox' и обрабатывать его по-разному, если это объект:

function ajaxLoad(targetBox, loadUrl) {
    if(typeof(targetBox) == "string")
       $("div." + targetBox).css("opacity",0.25);
    if(typeof(targetBox) == "object")
       $(targetBox).first().css("opacity",0.25);
}

Примечание: .first () действует как мера предосторожности на случай, еслиобъект ссылается на несколько элементов.

...