我正在开发一个Firefox插件,可以在网页上搜索所有textareas并在提交按钮之前发出警告。
我的代码看起来像这样
var submitWarning = content.document.createElement("div");
submitWarning.innerHTML = "Fancy Message";
$('textarea', window.content.document).each(function() {
var form = $(this, window.content.document).parents('form:first');
$(form, window.content.document).children('input[type=submit]').each(function() {
form.insertBefore(submitWarning, this);
});
});
如果我用$('input[type=submit]'.each
搜索所有提交,它工作正常但是因为我添加了textarea的东西而form:first
我遇到了问题(没有任何反应)
P.S。我使用window.content.document thingy,因为它是一个ff-plugin,如果没有它就无法正常工作
答案 0 :(得分:1)
您需要稍微更改一下,如下所示:
var submitWarning = content.document.createElement("div");
submitWarning.innerHTML = "Fancy Message";
$('textarea', window.content.document)
.closest('form')
.find('input[type=submit]')
.before(submitWarning);
参数语法为$(selector, context)
,在找到表单时,首先有.closest()
,这样可以更轻松,当你有一个元素时,你可以在它内部使用$(this)
{{} 3}},无需再次搜索。此外,您可以使用.each()
来简化:)
答案 1 :(得分:1)
:has()选择器对我来说是最好的选择。摆脱你的大量代码并使用它。
var buttons = $("form:has(textarea) input[type=submit]", window.content.document);
$("<div>").html("Fancy Message").insertBefore(buttons);
答案 2 :(得分:0)
试试var form = $(this, window.content.document).closest('form');
。不确定这是不是票,但这是我头脑中的第一件事。