"Другая" опция могла состоять в том, чтобы позволить методу находки взять дополнительный параметр с объектом по умолчанию, который был бы возвращен, если разыскиваемый объект не может быть найден.
Иначе я просто возвратил бы пустой указатель, если это действительно не исключительный случай, когда объект не найден.
Вы можете использовать делегирование событий , чтобы в основном подключить только один обработчик событий ко всему документу и получить элемент, для которого событие было первоначально отправлено, используя событие .target :
document.body.onmousedown = function (e) {
e = e || window.event;
var elementId = (e.target || e.srcElement).id;
// call your re-create function
recreate(elementId);
// ...
}
function recreate (id) {
// you can do the DOM manipulation here.
}
Редактировать: Вы можете назначать события для всех ваших Scriptaculous перетаскиваемых объектов следующим образом:
Event.observe(window, 'load', function () {
Draggables.drags.each(function (item) {
Event.observe(item.element, 'mousedown', function () {
alert('mouseDown ' + this.id); // the this variable is the element
}); // which has been "mouse downed"
});
});
Посмотрите пример здесь .
CMS в значительной степени дает правильный ответ, но вы нужно будет сделать его более дружественным к кроссбраузерности.
document.body.onmousedown = function (e) {
// Get IE event object
e = e || window.event;
// Get target in W3C browsers & IE
var elementId = e.target ? e.target.id : e.srcElement.id;
// ...
}
Если вы хотите воспроизвести идентификатор div, простым способом может быть cloneNode, например:
<div id="node1">
<span>ChildNode</span>
<span>ChildNode</span>
</div>
<div id="container"></div>
<script type="text/javascript">
var node1 = document.getElementById('node1');
var node2 = node1.cloneNode(true);
node2.setAttribute('id', 'node2');
var container = document.getElementById('container');
container.appendChild(node2);
</script>