jQuery:在load()函数中获取url的值

时间:2010-12-21 09:26:09

标签: jquery

我正在使用一个已经在超链接上定义onclick事件处理程序的库,例如:

<a onclick="$('#myDiv').load('/?__=634285190817664832&sort=Id&sortdir=ASC&page=1 #myDiv');" href="#">1</a>

如何获取'url'参数的值?

3 个答案:

答案 0 :(得分:1)

更新答案

...在tobyodavies指出(以最好的方式)我很厚。如果显式检索属性而不是反射属性,我们将从DOM中获取字符串,而不是函数,因此不必担心函数反编译(请参阅下面的注释) )。下面的其余部分有点偏执(因为我最初是从函数反编译),但仍然:

jQuery(function($) {

  var link, onclick, url, index;

  link = $('#theLink')[0];
  // IMPORTANT: Getting the *attribute* here, not the reflected property.
  // jQuery's `attr` function will give you the property, so go direct.
  onclick = link.getAttribute("onclick");
  display("onclick = " + onclick);
  index = onclick.indexOf("load('");
  if (index < 0) {
    url = "(unknown)";
  }
  else {
    url = onclick.substring(index + 6);
    index = url.indexOf("');");
    if (index > 0) {
      url = url.substring(0, index);
    }
  }
  display("url = " + url);

  function display(msg) {
    $("<p/>").html(msg).appendTo(document.body);
  }
});​

Live example

原始答案

请注意这里有龙。在您在DOM中访问它时onclick反射属性的值是大多数浏览器上的一个函数对象,因此您必须使用从未标准化的Function#toString已知一些移动浏览器只返回“[object Function]”。大多数桌面浏览器返回事件处理程序的反编译版本,但可以随时更改。

但是现在你已经知道了龙,你可以这样做。这是一种有点偏执的方法:

jQuery(function($) {

  var link, onclick, url, index;

  link = $('#theLink')[0];
  onclick = "" + link.onclick;
  display("onclick = " + onclick);
  index = onclick.indexOf("load('");
  if (index < 0) {
    url = "(unknown)";
  }
  else {
    url = onclick.substring(index + 6);
    index = url.indexOf("');");
    if (index > 0) {
      url = url.substring(0, index);
    }
  }
  display("url = " + url);

  function display(msg) {
    $("<p/>").html(msg).appendTo(document.body);
  }
});​

Live example

答案 1 :(得分:0)

试试这个:

<a href="http://google.de" onclick="alert(this.href);">Link</a>

或者你是说这个意思?

$(function() {
    var a = $('#link').attr('onclick');
    var l = (a+"").split("'");
    alert(l[3]);
});

您也可以替换“$”对象(注意!这是解决方案在chome中工作,但我没有做太多测试......)

$(function() {
    var a = $('#link').attr('onclick');
    var temp = $;

    // Override jQuery
    $ = function (t) {
        var s = new Object;
        s.load = function(url) { alert(url); }; 
        return s
    }
    a();

    // ...and back again
    $ = temp;

    // Is jQuery still working?
    alert($('#link').text());
});

答案 2 :(得分:0)

尝试使用属性节点获取未解析的版本,然后使用正则表达式提取URL。

link.attributes.getNamedItem('onclick').value.match(/someRegex/)