最近我一直在做很多模态窗口弹出窗口,什么不是,我使用jQuery.我用来在页面上创建新元素的方法绝大多数都是这样的:
$("<div></div>");
Run Code Online (Sandbox Code Playgroud)
但是,我觉得这不是最好或最有效的方法.从性能角度来看,在jQuery中创建元素的最佳方法是什么?
这个答案有以下建议的基准.
我希望能够说出来
$(someElem).text('this\n has\n newlines);
Run Code Online (Sandbox Code Playgroud)
并在浏览器中使用换行符进行渲染.我发现的唯一解决方法是在someElem上将css属性'white-space'设置为'pre'.这几乎可以工作,但是我在someElem的文本和顶部之间有一个令人讨厌的大填充,即使我将填充设置为0.有没有办法摆脱这个?
使用jquery是否更好地创建这样的DOM元素: -
function create(options)
{
$('<form action="' + options.action + '"></form>');
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
function create(options)
{
$form = $('<form></form>');
$form.attr('action',options.action);
}
Run Code Online (Sandbox Code Playgroud)
这可能是一个意见问题.我觉得第二种方式更清晰,但我怀疑效率较低......
我可以在jquery而不是document.createTextNode(' ')
js行中使用什么.
我想这样做:
js: divButtons.appendChild(document.createTextNode(' '));
jquery: $("#divButtons").append(?????);
我有一个链接按钮,用于从页面内容构建mailto.什么是从javascript启动它而不打开空白窗口或干扰它被调用的窗口的最佳方法?
function Email()
{
var sMailTo = "mailto:";
var sBody = "";
var alSelectedCheckboxes = new Array();
$("input:checkbox[CheckBoxType=Email]:checked").each(function()
{
alSelectedCheckboxes.push($(this).val());
});
if (alSelectedCheckboxes.length > 0)
{
for (var i=0; i<alSelectedCheckboxes.length; i++)
{
sBody += alSelectedCheckboxes[i];
sBody += "\n";
}
sMailTo += escape("<Insert Recipients Here>") +"?subject=" +escape("<Insert Subject Here>") +"&body=" +escape(sBody);
window.location.href = sMailTo;
}
else
{
alert("Please select some results");
}
}
Run Code Online (Sandbox Code Playgroud)
简单的功能在上面.window.location.href无法正常工作,除非它是Firefox/Chrome(它在IE8中重绘页面).我也尝试过window.open(sMailTo,"_ self")但是在IE8中再次打破了它所调用的页面.
我确定这是一个愚蠢的问题...... :-)
谢谢
我在JavaScript中使用CreateElemant这是我的代码:
function generateInputs()
{
var i = document.createElement("input");
for(var j=0;j<4;j++)
{
var c = document.createElement("input");
var r = document.createElement("input");
r.setAttribute('type',"radio");
document.getElementById('questions').appendChild(r);
c.setAttribute('type',"input");
document.getElementById('questions').appendChild(c);
}
i.setAttribute('type',"text");
document.getElementById('questions').appendChild(i);
}
Run Code Online (Sandbox Code Playgroud)
我想用jQuery编写它,但我找不到createElement()的等价物
所以我有一个 DOM 文档,它本质上是这样的
<categories>
<category id="1"/>
<category id="2"/>
</categories>
Run Code Online (Sandbox Code Playgroud)
这就是文档在 Firebug 中的预览方式,正如我所期望的。
但是,当我将其发布到服务器时,我得到
<categories>
<CATEGORY id="1"/>
<CATEGORY id="2"/>
</categories>
Run Code Online (Sandbox Code Playgroud)
事实上, doc.documentElement.firstChild.nodeName 返回“CATEGORY”。使用 jQuery.append('<category/>') 添加节点。
为什么所有大写返回子标签?
我想知道是否有可能,而不是通过jQuery选择器从DOM中选择一个元素,如果我可以创建一个.
例如:
$.create('#hello').insertAfter('#test');
Run Code Online (Sandbox Code Playgroud)
会生成以下内容:
<div id="test">This element already existed in the DOM.</div>
<div id="hello"></div>
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,对于更复杂的操作:
$.create('#test.a.b');
Run Code Online (Sandbox Code Playgroud)
对于:
<div id="test" class="a b"></div>
Run Code Online (Sandbox Code Playgroud)
显然,更复杂的操作如:selected或:nth-child或:not()以及所有这些操作都不需要实现.
有人知道解决方案吗?
谢谢.
我有一个由jquery创建的输入框,如下所示:
val input = $('<input class="pick_date" ... />')
Run Code Online (Sandbox Code Playgroud)
但输入中的.html()方法不返回$中输入的字符串.有谁知道为什么?
编辑:啊,我明白了这个问题.有没有办法获得整个输入框的html表示而不仅仅是条目?
所以,我知道如何以各种方式在jQuery中创建一个元素.但是我在今天之前从未遇到过这个问题:
var myspacer = $('<div />', {
"id": "nav-spacer",
"height": mynav.outerHeight()
});
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,使用jQuery的.before()方法将此变量添加到DOM中.有人能解释一下这里发生了什么吗?正在创建什么样的对象?jQuery如何知道如何将其转换为HTML元素?
我有一些javascript,我在一个选项附加一个选项:
var myuniqueddl = $('#myuniqueddl');
$("<option value='0'>--- Select a value ---</option>").appendTo(myuniqueddl);
Run Code Online (Sandbox Code Playgroud)
我实际上也试图为另一个选择做这个.
我想避免代码重复我应该将ddl传递给方法来执行此操作吗?
function(someType ddl)
{
$("<option value='0'>--- Select a value ---</option>").appendTo(ddl);
}
Run Code Online (Sandbox Code Playgroud)
将select传递给方法是一个坏主意吗?
有没有更好的方法呢?
如果这种方式可以,我将它传递给哪种类型?