как передать значение переменной внутри служебного метода $ () прототипа? - PullRequest
0 голосов
/ 26 мая 2009
function insertChildDiv(parentId)
{
  var ChildComment = new Element('div', {'class':'padding'});
  ChildComment.update('testing');
  $().insert(ChildComment);
}

я хочу значение parentId внутри $ () в строке

$().insert(ChildComment);

я уже пробовал

$('parentId').insert(ChildComment);

но он оценивает parentId как строку и ищет div с идентификатором элемента "parentId", поэтому ошибка будет $ ("parentId") равен нулю

также пытался

$(parentId).insert(ChildComment);

но возвращает ошибку "$ (parentId) .insert не является функцией"

кстати скрипт вызывается этим html

<a href="#" onclick="insertChildDiv(123456)" id="123456more">Replies and more</a>

Ответы [ 6 ]

2 голосов
/ 26 мая 2009

$ () принимает строку или элемент DOM в качестве параметра

Отредактировано для отражения правок в оригинале Q.

$ (parentId) будет работать до тех пор, пока идентификатор действителен.

идентификатор, передаваемый в функцию, равен «123456», а искомый идентификатор - «123456подробнее». Кроме того, вы передаете целое число (123456), а не строку. Во всяком случае, поскольку они не совпадают, прототип не находит его. Кроме того, идентификатор не должен начинаться с цифры: IE8 завершится с ошибкой, поскольку спецификации w3c говорят, что атрибут id не может начинаться с цифры (если я правильно помню)

Попробуйте изменить HTML на

<a href="#" onclick="insertChildDiv('more123456')" id="more123456">Replies and more</a>

и должно работать

1 голос
/ 26 мая 2009

ЭТО на помощь. «this» относится к самому элементу, поэтому передайте ссылку на элемент в вашу функцию, а не на строку.

<div onclick="insertChildDiv(this)">###</a>

<script type='text/javascript'>
function insertChildDiv(element) {
    $(element).insert(new Element('div',{'class':'padding'}).update('testing'))
}

// or if you want to add an ID:

function insertChildDiv(element) {
    $(element).insert(new Element('div',{'class':'padding',id:'more'+element.id}).update('testing'))
}

</script>
0 голосов
/ 27 мая 2009

вау большое спасибо всем! сейчас это работает. для блага других, которые могут столкнуться с тем же сценарием, вот что, я думаю, произошло: НЕ ИСПОЛЬЗУЙТЕ НОМЕРА ТОЛЬКО В качестве идентификатора для ЭЛЕМЕНТА (даже если слово «id» предполагает, что это должно быть число.) И ДА, если вам действительно нужно число для этого идентификатора, объедините хотя бы одну букву в начале идентификатора ex. идентификатор, который я использую сейчас, это id = "parent123456"

0 голосов
/ 26 мая 2009

Ваша оригинальная функция работает с аргументом, переданным в $ () ...

function insertChildDiv(parentId)
{
  var ChildComment = new Element('div', {'class':'padding'});
  ChildComment.update('testing');
  $(parentId).insert(ChildComment);
}

Вот тестовый пример:

Передача переменной в $ ()

0 голосов
/ 26 мая 2009

значение parentId является идентификатором div, в котором находится этот <a href="#" onclick="insertChildDiv('more123456')" id="more123456">Replies and more</a>. Я передал значение этого parentId в функцию insertChildDiv (), чтобы вставленный дочерний элемент div был вложен в элемент div этого родителя. также идентификатор тега id="more123456" будет использоваться для изменения значения href на значение, которое будет скрывать вставленный дочерний элемент div

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

если я удаляю одиночные qoutes, которые оборачивают parentId внутри ex ($). $(parentId).insert(ChildComment); возвращается ошибка:

$(parentId).insert is not a function

Если я оберну parentId в одинарные кавычки, прототип не найдет div с идентификатором parentId, ошибка будет $("parentId") is null

0 голосов
/ 26 мая 2009

Обычно вы используете $ (parentId) .insert (...).

Не будет $(parentId + 'more').insert(...) работать в вашем конкретном случае?

...