JQuery: заголовок Ahref из базового img alt - PullRequest
1 голос
/ 03 августа 2010

Я использую это для открытия исходящих ссылок в новом окне, но когда цель это изображение, я хочу отобразить изображение alt в качестве заголовка.

 $("a[href*='http://']:not([href*='"+location.hostname+"']),
    [href*='https://']:not([href*='"+location.hostname+"'])")
            .addClass("external")
            .attr("target","_blank")
            .attr("title", "Open link in new window");
        });

Какой самый простой способ добавить это в .attr ("заголовок")?

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Если <img> находится внутри якоря, вы можете сделать это так:

$("a[href*='http://'], a[href*='https://']").not("[href*='"+location.hostname+"']").each(function() {
  var $this = $(this).addClass("external").attr("target","_blank");
  var img = $this.children('img[alt]');
  $this.attr("title", img.length ? img[0].alt : "Open link in new window");
});

Здесь есть несколько изменений, ваш текущий селектор смотрит только на <a> в первом http:// check, но затем просматривает все элементов в вашем https:// чеке, так что это будет намного эффективнее.Затем мы проверяем, имеет ли текущий элемент <img> внутри, если он есть, и у него есть атрибут alt, который мы используем, в противном случае мы даем ему заголовок по умолчанию.

Или другой метод,используйте то, что у вас есть (измените селектор, чтобы он работал эффективнее), а затем установите заголовки для якорей, которые содержат изображения, например:

$("a.external > img[alt]").each(function() {
  $(this).parent().attr("title", this.alt);
});
0 голосов
/ 03 августа 2010

Судя по тому, как это звучит, вы ссылаетесь на изображение, которое хотите отобразить во внешнем окне.Когда вы используете изображение в качестве цели тега привязки, оно ссылается на фактический файл изображения, а не на элемент img, поэтому с ним не связано тега alt.Если, с другой стороны, изображение содержится в якоре, и вы щелкаете по нему, чтобы открыть новое окно, то решение @ Nick должно сработать..

...