Почему document.getElementById ('hyperlink_element_id') возвращает значение атрибута href гиперссылки? - PullRequest
1 голос
/ 26 марта 2009

Я пытаюсь получить сам объект Web.UI.WebControls.HyperLink через javascript, чтобы я мог изменить его ImageUrl.

Здесь я устанавливаю гиперссылку NavigateUrl для вызова функции javascript:

lnkShowHide.NavigateUrl = String.Format(
    "javascript:ShowHideElement('{0}');", lnkShowHide.ClientID
)

Вот моя функция JavaScript:

function ShowHideElement(img) {
   var ele = document.getElementById(img);
   if(ele != null) {
      // Not sure if this will change the hyperlink's ImageUrl property???
      img.src = 'smallPlus.gif';
   }
}

Однако, если я проверяю значение 'ele' после вызова getElementById, он печатает "String.Format("javascript:ShowHideElement....." и фактически не получает сам объект гиперссылки.

Любые идеи будут с благодарностью!

1 Ответ

5 голосов
/ 26 марта 2009

Почему document.getElementById () возвращает значение атрибута href гиперссылки?

Это не так. Но когда вы «alert (element)», alert () вызывает toString () для элемента, а HTMLLinkElement.toString () возвращает содержимое атрибута href, поэтому «alert (link)» выдает те же результаты, что и «alert» (link.href)».

(что немного странно и запутанно, но именно так работал JavaScript 1.0, поэтому с этим уже ничего не поделаешь.)

Я проверяю значение 'ele' после вызова getElementById, оно печатает "String.Format (" javascript: ShowHideElement ..... "

Этого не должно случиться с конкретным примером, который вы привели ... код серверной части «String.Format ...» не может пройти на сторону клиента, если вы случайно не вложили его в цитаты, например .:

lnkShowHide.NavigateUrl = "String.Format(...)";

Другие проблемы, которые приходят на ум, заключаются в том, что функция меняет имя (ShowHideElement / ShowHideImage), и вы, похоже, пытаетесь установить «.src» для элемента ссылки (). Ссылки не имеют .src, только изображения.

Во всяком случае, вы, вероятно, не хотите делать виджет показа / скрытия подобным этому. javascript: URL-адреса всегда неправильны, и в вашем примере много вложенных строк друг в друге, которые всегда хрупки. Вы можете попробовать подход «ненавязчивый сценарий», генерируя разметку, например:

<div class="showhide"> blah blah blah </div>

С помощью JavaScript для добавления функциональности открытия / закрытия на стороне клиента (чтобы UA, не являющиеся JavaScript, и поисковые системы увидели всю страницу без скрытых битов). eg.:

function ShowHider(element) {
    var img= document.createElement('img');
    element.parentNode.insertBefore(img, element);

    function toggle() {
        var show= element.style.display=='none';
        element.style.display= show? 'block' : 'none';
        img.src= '/images/showhide/'+(show? 'open' : 'closed')+'.gif';
        img.alt= show? '-' : '+';
        img.title= 'Click to '+(show? 'close' : 'open');
    }
    img.onclick= toggle;
    toggle();
}

// Apply ShowHider to all divs with className showhide
//
var divs= document.getElementsByTagName('div');
for (var i= divs.length; i-->0;)
    if (divs[i].className=='showhide')
        ShowHider(divs[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...