Ключевое слово Javascript this, возвращающее атрибут href, а не Object на теге - PullRequest
1 голос
/ 29 июля 2010

Требование : вернуть объект элемента.
Проблема : Используя приведенный ниже код, я ожидал ссылки для возврата [объект], но они фактически возвращают строку в атрибуте href (или в случае первой ссылки Окно объекта).

(HTML ниже был протестирован в FireFox 3.6.8 и Internet Explorer 7 (7.0.6002.18005) с такими же результатами.)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Anchor onclick tests</title>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <div>
            <a href="javascript:alert(this);" title="">&lt;a href=&quot;javascript:alert(this);&quot;&gt;...&lt;a/&gt;</a> - Returns: [object Window]<br />
            <a href="#" onclick="alert(this);" title="">&lt;a href=&quot;#&quot; onclick=&quot;alert(this);&quot;&gt;...&lt;a/&gt;</a> - Returns: Full URI<br />
            <a href="javascript:void(0);" onclick="alert(this);" title="">&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;alert(this);&quot;&gt;...&lt;a/&gt;</a> - Returns: javascript:void(0);
        </div>
    </body>
</html>  

Добавление .tagname к ключевому слову this возвращает undefined для первой ссылки, но правильно определяет вторую и третью как A. Аналогичным образом, запрос .href возвращает undefined для первой ссылки, но правильно выводит href (полный URI в случае '#').

Кто-нибудь знает, почему и как я могу ухватиться за сам объект A?

Ответы [ 2 ]

6 голосов
/ 29 июля 2010

Как вы сказали, доступ к свойству во второй и третьей ссылке работает.Это означает, что this действительно является элементом A DOM, но когда он преобразуется в строку (что происходит, когда вы хотите alert это), он преобразуется в URL.

у вас уже есть свой объект;)

То же самое происходит, когда вы делаете alert(document.location).На самом деле это объект, но при преобразовании в строку он печатает текущее местоположение.

1 голос
/ 29 июля 2010

Когда вызывается alert, метод toString вызывается изнутри, поэтому в случае якорей, предупреждающих href, toString якорей возвращает href.

<a id="foo" href="blah">fsdjl</a>

В консоли JS выполните:

document.getElementById('foo').toString()

Это подтвердит это.

Что касается window, this не привязан к методу, принадлежащему якору, поэтому this относится к глобальному контексту. onclick привязан к привязке, поэтому this, то есть текущий контекст выполнения, изменяется на привязку.

<a href="#" onclick="javascript:alert( this.nodeName )">blah</a>

Результатом является оповещение A, которое является nodeName, поэтому браузер возвращает href, если есть набор href, поэтому он более "читабелен" и менее расплывчат.

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