根据src文件扩展名类型更改元素类型

时间:2013-05-25 18:18:15

标签: jquery html5 wordpress

目标:如果自定义元素类型(例如<media ...>)具有多个src文件扩展名之一(例如m4vjpg ...),请更改自定义元素类型以反映适当显示src的元素。

我想也许media元素的jquery选择器可能是问题吗?

jQuery(function($){
    $(document).ready(function($) {
    $.fn.changeElementType = function(newType) {
        var attrs = {};

        $.each(this[0].attributes, function(idx, attr) {
            attrs[attr.nodeName] = attr.nodeValue;
        });

        this.replaceWith(function() {
            return $("<" + newType + "/>", attrs).append($(this).contents());
        });
    }
    })(jQuery);


    $("media").has('[src$=".jpg"]').changeElementType("img");
    $("media").has('[src$=".m4v"]').changeElementType("video");
});

到目前为止运行此操作时,Chrome控制台会报告jQuery错误...但据我所知,所有内容都已正确声明。对某事的语法或误解?

编辑:这是错误报告

Uncaught TypeError: object is not a function
(anonymous function)
l jquery.min.js:2
c.add jquery.min.js:2
v.fn.v.ready jquery.min.js:2
v.fn.v.init jquery.min.js:2
v jquery.min.js:2
(anonymous function)
(anonymous function) jquery.min.js:2
v.extend.globalEval jquery.min.js:2
(anonymous function) jquery.min.js:2
v.extend.each jquery.min.js:2
v.fn.extend.domManip jquery.min.js:2
v.fn.extend.append jquery.min.js:2
(anonymous function) jquery.min.js:2
v.extend.access jquery.min.js:2
v.fn.extend.html jquery.min.js:2
(anonymous function) jquery.min.js:2
l jquery.min.js:2
c.fireWith jquery.min.js:2
T jquery.min.js:2
r

•这是在Wordpress noConflict模式下运行的

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

修改

我对元素和图像标记的输出进行了微调。输出的<img></img>无效。请参阅更新的小提琴

<德尔> http://jsfiddle.net/denniswaltermartinez/TjGzZ/

http://jsfiddle.net/denniswaltermartinez/TjGzZ/3/

只是一些小调整。

jQuery(function ($) {

    $.fn.changeElementType = function (newType) {

        if (!this.length) return;    // added

        var attrs = {};

        $.each(this[0].attributes, function (idx, attr) {
            attrs[attr.name] = attr.value;
        });

        this.replaceWith(function () {

            var element = $('<' + newType + '/>', attrs);

            if (newType !== 'img')
                element.append($(this).contents());

            return element;
        });
    };

    $('media[src$=".png"]').changeElementType('img');    // changed slightly
    $('media[src$=".m4v"]').changeElementType('video');    // changed slightly
});

而不是

$("media").has('[src$=".jpg"]').changeElementType("img");

已更改为

$('media[src$=".png"]').changeElementType('img');

当然你可以随意改变.png,我只是用png进行测试。

该插件还有一个小调整,只是检查该元素是否存在,如果不做任何事情。如果那个检查不存在,它会对你大喊大叫,因为它会尝试获取未定义元素的属性。