6

我正在尝试编写一个 Greasemonkey 脚本。网页中有这样的东西:

<div id="div1" class="..." title="
  asdsadsadasd&nbsp;&lte;...
">...</div>

我想使用 jQueryattr方法获得它的标题。但它返回一个空值。我的js代码是这样的:

$("#div1").attr("title");

我已经以许多不同的方式尝试了警报,并且我确定正确选择了所需的元素并且所有其他属性都很好!只是这个返回空字符串!( '' ) 它与多行有关吗?

更多细节: 我使用的是最新的 jQuery (1.8.2),我的浏览器是 Firefox 16.0.1。我看到了这个链接,它在那里工作!所以也许是因为别的原因。实际上,我正在编写一个 Greasemonkey 脚本,该脚本正在更改一个不属于我的网页以进行编辑。因此无法编辑 HTML 代码。

4

5 回答 5

9

title不是 div 的有效属性,但仍应有效。如果您可以轻松更改 html,则可以使用:

<div id="div1" class="..." data-title="
  asdsadsadasd&nbsp;&lte;...
">...</div>

JS

alert( $("#div1").data("title"));

还要确保document.ready在代码触发时将代码包装在元素中。我怀疑这可能是你的问题

$(function(){
/* your code*/

})
于 2012-10-21T21:22:55.903 回答
1

我有一个类似的问题,但似乎是 jquery ui 工具提示功能导致了这个问题。我最终向与 jquery ui 无关的元素添加了另一个属性。我使用了 alt 元素,但如果你已经在使用它,你可以使用类似 data-alt 的东西。

<a class="tooltip" 
    title="this will show up in the tooltip and may cause trouble using title later on" 
    data-alt="Grab this attribute instead of the title to bypass jqui showing the title attr as an empty string"
/>
<script>
    $(".tooltip").tooltip();
    a.click(function(){
        var title = $(this).attr('title'); // this showed up as an empty string
        title = $(this).attr('data-alt'); // this showed up as the text I was expecting
    });
</script>
于 2015-01-20T14:52:28.500 回答
1

title是空白的,因为它(或很可能是<div>)是在 Greasemonkey 脚本触发后通过 AJAX 添加的。

使用waitForKeyElements() 实用程序来处理这种情况。

这是一个使用 jQuery 并获取该标题的完整脚本:waitForKeyElements

// ==UserScript==
// @name     _Grab element's title, when it is added by AJAX
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle   
// ==/UserScript==
/*- The @grant directive is needed to work around a design change introduced
    in GM 1.0.   It restores the sandbox.
*/

function grabDivTitle (jNode) {
    //***** YOUR CODE HERE *****
    var titleStr    = jNode.attr ("title");
    console.log ("Title is:", titleStr);
}

waitForKeyElements ("#div1", grabDivTitle);
于 2012-10-21T22:00:40.303 回答
1

问题可能与 jQuery 版本有关。

它与 JQuery 1.8.2 一起成功运行。我用 Chrome 和 IE9 试了一下。

<div id="div1" class="..." title="      
asdsadsadasd&nbsp;&lte;...^+%:&/^+%6732045623459^+%?^+%)=1234114     asdfhj asklhdjflasdjfkasjdfasdk nf asdf as
 fsa
df sadf asd
f asdf 
sadf asdf sadf as
df 
sdfas 
f
asdf asdf        
">...</div>

https://jsfiddle.net/LgkhW/2/

于 2012-10-21T21:27:22.613 回答
0

看起来像一个错误:

$("<div>").attr("tilte","dyanmic").addClass("test").appendTo("body");
alert($("#div1").attr("title"));
alert($(".test").attr("title"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div1" class="..." title="static">...</div>

于 2015-10-22T12:01:04.810 回答