0

我有一个网站,如果它们在网站上的自定义字典中,我需要检查所有 href 链接。如果它们存在,则 a-tag 中的 title 属性应设置为从服务器获取的文本。我根据该站点的其他问题将其放在一起(示例,未测试):

// How to only activate "a href" links?
jQuery('a').mouseover(function() {

  // should be what is between <a href="">this text</a>. Is this correct?
  var dictionaryWord = jQuery(this).text();

  // do a server site call to get description for the word given in the var above
  jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord },

    function(data){
      // set title tag for the a-tag actual a-tag
      // will "this" refer to the a-tag with mouseover?
      jQuery(this).attr("title", data);

  });

});

以上可能有错误。我刚刚根据 StackOverflow 上的不同答案创建了它。有没有比上述更好的方法从服务器获得响应?

如果它有效,我只需要一种在鼠标悬停时显示标题标签的好方法。我已经看到了一些包,所以这应该很容易。

BR。安德斯

更新(基于下面的答案)

// all "a href" do this for the first mouseover "one.()"
jQuery('a[href]').one('mouseover',(function() {


  // get a reference to the clicked + get dictionary word
  var anchor = jQuery(this),
      dictionaryWord = anchor.text();

  // do a server site call to get description for the word given in the var above
  jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord },

    function(data){
      // set title tag for the a-tag actual a-tag
      // will "this" refer to the a-tag with mouseover?
      anchor.attr("title", data);

  });

}));
4

4 回答 4

0

一些改进:

//Match only a with the href attribute
jQuery('a[href]').mouseover(function() {

  var dictionaryWord = jQuery(this).text(),
  //cache the context and use it in the ajax function
  el=jQuery(this);

  jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord },

    function(data){
      //You can't use the $(this) use the cached context
      el.attr("title", data);  
  });

});

这应该有效。

于 2010-01-27T11:57:52.960 回答
0

此代码应该可以工作,但是在我看来,最好在没有 javascript 的情况下加载标题,因为它可以减少服务器上的负载。除非你想用 HTML 显示一些描述。为此, attr 标签不是一个选项。

于 2010-01-27T11:58:03.180 回答
0

你所写的作品,只要getDescriptionFromDictionaryWord.aspx看起来像:

Response.Clear();
Response.Write("description for word");
Response.End();

即整个响应是您要显示的值。

一个更好的方法是创建一个类型为“Web service (asmx)”的新文件,称之为“Dictionary.asmx”。在创建的 CS/VB 文件中,确保取消注释掉注释掉的ScriptService属性,然后添加如下所示的方法:

[WebMethod]
public string GetDescription(string word) {
    // internal logic for dictionary lookup
    return description;
}

这样,您可以提交如下请求:

$('a[href]').mouseover(function() {

    // the above selector finds all anchors with 'href' attribute

    var anchor = $(this); // get a reference to the clicked item
    var dictionaryWord = anchor.text();

    jQuery.get("/Dictionary.asmx/GetDescription", { word: dictionaryWord }, function(data){
      anchor.attr("title", data.d); // .NET will wrap the response in a 'd' property
    });

});
于 2010-01-27T12:02:22.000 回答
0

我可能会建议也使用$('a[href]').one('mouseover',function()...而不是$('a[href]').mouseover(function()...只是这样它每个链接只执行一次,而不是超时将鼠标悬停在链接上。

于 2010-01-27T12:09:03.917 回答