根据 Javascript 是否存在 ALT 属性执行操作

Do an action based on presence of ALT attribute with Javascript

我有一些 javascript 可以查看正文并找到单词,如果存在的话,它会输出一个 div。这对很多事情都很有用,但是...

我还需要查看页面的正文和所有 ALT 标记。

我发现了这个:Use javascript to hide element based on ALT TAG only? 这似乎改变了 ALT 属性,但是我想执行一个操作。

到目前为止,这是我的 JS。

var bodytext = $('body').text();
    if(bodytext.toLowerCase().indexOf('one' || 'two')==-1)

return; 
    var elem = $("<div>Text Here</div>");

谢谢。

P.S。我是 JS 的 N00B/ 相对较新,我正在为一个小项目做这个,所以我不确定在 JS 函数方面从哪里开始。

您正在使用 jQuery 库,您可以 select 元素的属性,例如:

   $('[alt="one"]').each(function(el){
        // do something
        var x = $(el).arrt('alt');
    });

如果你使用select或$('[alt]')你可以获得设置了这个属性的元素,然后如果你有更复杂的selection检查元素的值。

你必须改变你的 return,因为你不能把 div 放在 ALT 标签里,它没有用。

这是您的预期输出。

更新


如果您想更改页面中的所有图像和视频,使用 jquery 的方法是通过 $.replaceWith():

$('img,video').replaceWith($('<div>Text Here</div>'));

如果需要过滤元素:

$('img,video').each(function(el){
    if($(el).prop('tagName') == 'IMG' &&
       $(el).attr('alt') == 'the text...') {
           $(el).replaceWith($('<div>Text Here</div>'));
       }
})

但我不是 Chrome 扩展方面的专家,我只是将此代码放在 jQuery 中,因为您使用的是 jQuery。

当然可以做到,很多代码都是普通的 javascript 和 DOM API.

更新答案 试试这个,我注释了代码来解释一下。

// build array of triggers
var triggers = ['trigger1','trigger2','trigger3'];

// wait for page to load
$(function() {

    // show loading overlay
    $('body').append('<div id="mypluginname-overlay" style="height:100%;width:100%;background-color:#FFF;"></div>');

    // check page title
    var $title = $('head title');
    for(trigger of triggers) {
        if($($title).innerHTML.toLowerCase().indexOf(trigger) >= 0) {
            $($title).innerHTML = '*censored*'; 
        }
    }

    // check all meta
    $('meta').each(function() {
        var $meta = $(this);
        for(trigger of triggers) {
            if($($meta).attr('name').toLowerCase().indexOf(trigger) >= 0) {
                censorPage();
                return; //stop script if entire page must be censored
            } else if($($meta).attr('content').toLowerCase().indexOf(trigger) >= 0) {
                censorPage();
                return; //stop script if entire page must be censored
            }
        }
    });

    // check all img
    $('img').each(function() {
        var $img = $(this);
        for(trigger of triggers) {
            if($($img).attr('alt').toLowerCase().indexOf(trigger) >= 0) {
                censor($img);
            }
        }
    });

    // check all video
    $('video').each(function() {
        var $video = $(this);
        for(trigger of triggers) {
            if($($video).attr('alt').toLowerCase().indexOf(trigger) >= 0) {
                censor($video);
            }
        }
    });

    // if you want to be extra careful and check things like background image name,
    // you'll have to run this code here - very inefficent
    // but necessary if you want to check every single element's background image name:
    for($element of $('body').children()) {
        for(trigger of triggers) {
            if($($element).css('background-image').toLowerCase().indexOf(trigger) >= 0) {
                $($element).css('background-image','');
            }
        }   
    }

, function() { // Not sure if this is totally correct syntax, but use a callback function to determine when
               // when the rest of the script has finished running
        // hide overlay
        $('#mypluginname-overlay').fadeOut(500);
    }});

function censor($element) {
    // just a basic example, you'll probably want to make this more complex to overlay it properly
    $element.innerHTML = 'new content';
}

function censorPage() {
    // just a basic example, you'll probably want to make this more complex to overlay it properly
    $('body').innerHTML = 'new content';
}

---原答案--- 我不确定您想在这里做什么,您应该添加更多细节。但是,如果您选择使用 jQuery,它提供了大量有用的方法,包括方法 .attr(),它可以让您获取任何元素的任何属性的值。

示例:

var alt = $('#my-selector').attr('alt');
if (alt == 'whatYouWant') {
  alert('yay');
} else {
  alert('nay');
}