目标:如果自定义元素类型(例如<media ...>
)具有多个src
文件扩展名之一(例如m4v
,jpg
...),请更改自定义元素类型以反映适当显示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模式下运行的
答案 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进行测试。
该插件还有一个小调整,只是检查该元素是否存在,如果不做任何事情。如果那个检查不存在,它会对你大喊大叫,因为它会尝试获取未定义元素的属性。