带有2个选择器的JQuery插件

带有2个选择器的JQuery插件,jquery,Jquery,我创建了一个JQuery工具提示插件,可以通过两种方式使用: 工具提示内容是HTML锚的标题 工具提示内容作为选项传递 我想有另一个选择: 整个工具提示标记将是页面中的一个元素 让我举一个我正在寻找的例子: $(“table td.Task a.Menu”,“li div.Menu”).Tooltip() 所以“table td.Task”下的每个链接菜单都会触发一个工具提示 工具提示标记将位于a.菜单的同一LI下的div.菜单 如何改变我的插件也能做到这一点?我目前的代码是: (fun

我创建了一个JQuery工具提示插件,可以通过两种方式使用:

  • 工具提示内容是HTML锚的标题

  • 工具提示内容作为选项传递

我想有另一个选择:

  • 整个工具提示标记将是页面中的一个元素

    让我举一个我正在寻找的例子:

    $(“table td.Task a.Menu”,“li div.Menu”).Tooltip()

    所以“table td.Task”下的每个链接菜单都会触发一个工具提示

    工具提示标记将位于a.菜单的同一LI下的div.菜单

如何改变我的插件也能做到这一点?我目前的代码是:

(function ($) {

  $.fn.Tooltip = function (options) {

    var defaults = {
      content: "",
      class: "Tooltip",
      id: "Tooltip"
    };

    var options = $.extend({}, defaults, options);

    var tooltip;

    $(this).each(function () {

      var title = $(this).attr("title");
      if (title == undefined && options.content == "") return;

      $(this).mouseenter(function (e) {

        $(this).removeAttr("title")
        tooltip = "<div id='{id}' class='{class}'>{content}</div>"

        var content = options.content == "" ? title : options.content;
        tooltip = tootip.replace("{class}", options.class).replace("{id}", options.id).replace("{content}", content);

        $("body").append(tooltip);
        $("#" + options.id).fadeIn("fast");

      }), // Mouse Enter

      // Mouse Leave, Mouse Down and Mouse Move functions ...

    }
   }
(函数($){
$.fn.Tooltip=函数(选项){
var默认值={
内容:“,
类:“工具提示”,
id:“工具提示”
};
var options=$.extend({},默认值,选项);
var工具提示;
$(此)。每个(函数(){
var title=$(this.attr(“title”);
if(title==未定义&&options.content==“”)返回;
$(此).mouseenter(函数(e){
$(此).removeAttr(“标题”)
工具提示=“{content}”
var content=options.content==“”?标题:options.content;
tooltip=tootip.replace(“{class}”,options.class).replace(“{id}”,options.id).replace(“{content}”,content);
$(“正文”).append(工具提示);
$(“#”+options.id).fadeIn(“fast”);
}),//鼠标输入
//鼠标左键、鼠标下键和鼠标移动功能。。。
}
}

谢谢!

不打算重写整个插件,但可以添加一个选项,从页面返回内容:

var defaults = {
      content: "",
      class: "Tooltip",
      id: "Tooltip",
      contentSource: 'title' /* "title" as default or "html" for in page*/
      htmlSource: function($el){
         /* write whatever traverse returns content wanted*/
         return  $el.siblings('div.foo').html();
      }
    };
现在,当您设置内容时,请检查哪个源

/* should cache $(this) since using it numerous times*/
var $this=$(this)


var content;
if( options.contentSource !='title'){
   content=options.htmlSource($this);
}else{
  content= /* existing code*/
}
用途:

$("table td.Task a.Menu", "li div.Menu").Tooltip({
      contentSource: 'html',
      htmlSource: function($el){            
          return  $el.parent().find('.someClass').html();
      }
});

我尝试了你的建议,但出现了一些奇怪的情况。我将DIV添加到我的页面:“Text”。在这种情况下,工具提示会显示。但是如果我有“
  • 项1
  • 项2
  • ”然后它就不显示了。我不知道为什么。你知道为什么会发生这种情况吗?谢谢你在jsfiddle.net中创建了一个演示。不知道你使用的是什么html或遍历,也不知道你在
    class=“.someClass”中有一个
    dot
    这不正确您好,JSFIDLE遇到了一些问题,所以我使用了以下方法:…我不确定我是否按照您的建议实现了所有功能。最后一个看起来很奇怪的问题是:它不应该显示工具提示,但不知怎的它显示了…知道为什么吗?我无法弄清楚。任何改进代码的建议都是好的来吧。谢谢。最后一个问题是
    var source=options.source($(this));
    sibbins().html()
    不是
    未定义的
    并将返回第一个同级的html。需要更好的条件测试,但对我来说,拥有明确指定数据来源的选项对我来说似乎最明智
    contenTsource
    asHi Mighuel,我从你的几篇文章中删除了你的签名,因为不鼓励使用SE签名。请参阅常见问题解答或