当前位置:  开发笔记 > 编程语言 > 正文

为什么document.getElementById('hyperlink_element_id')返回超链接的href属性的值?

如何解决《为什么document.getElementById('hyperlink_element_id')返回超链接的href属性的值?》经验,为你挑选了1个好方法。

我试图通过javascript获取Web.UI.WebControls.HyperLink对象本身,以便我可以修改它的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';
   }
}

但是,如果我在调用getElementById之后检查'ele'的值,它会打印" String.Format("javascript:ShowHideElement....."并且实际上并没有获得超链接对象本身.

任何想法将不胜感激!



1> bobince..:

为什么document.getElementById()返回超链接的href属性的值?

它没有.但是当你"alert(element)"时,alert()调用元素上的toString(),HTMLLinkElement.toString()返回href属性的内容,因此"alert(link)"会发出与"alert"相同的结果(link.href)".

(这有点奇怪和令人困惑,但这就是JavaScript 1.0的工作方式,因此现在没有太多可以解决的问题.)

我在调用getElementById之后检查'ele'的值它打印"String.Format("javascript:ShowHideElement ....."

这不应该发生在您给出的确切示例中......除非您不小心将其括在引号中,否则服务器端"String.Format ..."代码无法进入客户端,例如.:

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

我想到的其他问题是函数更改名称(ShowHideElement/ShowHideImage),并且您似乎试图在链接元素()上设置'.src'.链接没有.src,只有图像.

无论如何,你可能不想像这样做一个显示/隐藏小部件.javascript:URL总是错误的,你的例子涉及很多嵌套的字符串,它们总是很脆弱.您可以尝试"不引人注目的脚本"方法,生成如下标记:

blah blah blah

使用JavaScript在客户端添加打开/关闭功能(因此非JavaScript UA和搜索引擎将看到整个页面而不隐藏位).例如.:

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]);

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有