Только, чтобы сделать некоторые продолжают, я основывал свой код реализация Robert Nyman, отправленная Shog9, но отбыл немного из его точной версии по трем причинам:
document.getElementById()
или document.getElementsByTagName()
. Примечание, что я все еще положился главным образом на его код. Его навыки JavaScript, очевидно, далеко вне моего собственного. Я действительно пытался факторизовать некоторые избыточные переменные, но это об этом.
, Имея это в виду, вот то, с чем я закончил (, кажется для работы в IE6, IE7, Firefox 3, и Chrome видит новое примечание в конце ):
if (!document.getElementsByClassName)
document.getElementsByClassName = function (className)
{
var classes = className.split(" ");
var classesToCheck = "";
var returnElements = [];
var match, node, elements;
if (document.evaluate)
{
var xhtmlNamespace = "http://www.w3.org/1999/xhtml";
var namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace:null;
for(var j=0, jl=classes.length; j<jl;j+=1)
classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
try
{
elements = document.evaluate(".//*" + classesToCheck, document, namespaceResolver, 0, null);
}
catch(e)
{
elements = document.evaluate(".//*" + classesToCheck, document, null, 0, null);
}
while ((match = elements.iterateNext()))
returnElements.push(match);
}
else
{
classesToCheck = [];
elements = (document.all) ? document.all : document.getElementsByTagName("*");
for (var k=0, kl=classes.length; k<kl; k+=1)
classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
for (var l=0, ll=elements.length; l<ll;l+=1)
{
node = elements[l];
match = false;
for (var m=0, ml=classesToCheck.length; m<ml; m+=1)
{
match = classesToCheck[m].test(node.className);
if (!match) break;
}
if (match) returnElements.push(node);
}
}
return returnElements;
}
Обновление:
Одно новое примечание по этому. Я с тех пор перечитал примечания по исходной реализации, и я понимаю теперь, когда мой код мог падать в случае, где существующий браузер имеет свою собственную реализацию, потому что реализации по умолчанию возвращают nodelist, куда это возвращает массив. Это включает более свежий Firefox и сафари и оперные браузеры. Большую часть времени это не будет иметь значения, но в некоторых ситуациях это могло. Это объясняет, что объект № 2 от упоминает выше.
то, Что это означает, - то, что, в то время как мой код технически работает везде, он мог привести к тонко отличающемуся (чтение: трудно для отладки), поведение в различных местах, и это не хорошо. Я должен прикреплять это или к также возврату nodelist или переопределять предоставленный метод для возврата массива (который является тем, что оригинал сделал). Вероятно, первый был бы более простым, но что последний будет лучше .
Однако это работает в данный момент в локальной среде интранета (в значительной степени весь IE), так же в настоящее время я оставлю фиксацию как осуществление для читателя.
Насколько мне известно, GORM можно использовать отдельно, начиная с Grails 1.1. Это позволяет вам использовать GORM в качестве ORM, не используя полную структуру Grails
. Однако я не думаю, что можно использовать GORM вне Spring (который является фундаментом, на котором построен Grails). Подведем итоги:
Пример приложения, демонстрирующий, как использовать GORM вне Grails, доступен здесь . Если вы хотите просмотреть исходный код этого примера в браузере (вместо того, чтобы извлекать его из репозитория SVN), начните здесь .