2013-05-25 115 views
0

目标:如果自定义元素类型(前<media ...>)有几个src文件扩展名,更改自定义元素类型,以正确反映一个(前m4vjpg ...。)元素适当地显示src更改元素类型

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

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模式下运行

+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 。

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