$('body')[0].attributes
// ^
// | в этой точке мы понимаем, что jquery бесполезен
// | и лезем к данным через DOM API
// | при этом получаем мы NamedNodeMap,
// | который даже forEach не поддерживает
|
задача по сложнее: как с помощью jquery обрамить все вхождения слова "jquery" тэгами <my_found>
|
> jQuery легко делает то чего не может
jMünchhausen) |
Цитата:
Array.prototype.slice.call( attributes ).forEach ... Цитата:
Цитата:
|
Цитата:
который не будет оборачивать в гламурный объект наш чистенький элемент.
$.find("body").attributes;
Цитата:
так, чтобы не посбивались обработчики (addEventListener, не делегированные) и ссылки на существующие элементы, которые существуют наравне с обычным текстом. |
Цитата:
Array.prototype.forEach.call( attributes,.. |
<head>
<style>
my_found {
background: gray;
}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
jQuery(function ($) {
$('body').find(':contains("jquery")').contents()
.filter(function () {
return this.nodeType == 3;
})
.each(function () {
var str = this.nodeValue.replace(/(jquery)/g, '<my_found>$1</my_found>');
$(this).replaceWith(str);
});
$('body').contents().each(function () {
if (this.nodeType == 3 && this.nodeValue.indexOf('jquery') != -1) {
var str = this.nodeValue.replace(/(jquery)/g, '<my_found>$1</my_found>');
$(this).replaceWith(str);
}
});
alert($('body').html());
});
</script>
</head>
<body>
<div onclick="alert(1)">jquery text1</div>
jquery
<span onclick="alert(2)">
text2
<span onclick="alert(3)">
text3 jquery
<button>jquery text</button>
</span>
</span>
</body>
<head>
<style>
my_found {
background: gray;
}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
jQuery(function ($) {
$('body').find(':contains("jquery")').contents()
.filter(function () {
return this.nodeType == 3;
})
.add ($('body').contents()
.filter(function () {
if (this.nodeType == 3 && this.nodeValue.indexOf('jquery') != -1) {
return this;
}
})
).each(function () {
var str = this.nodeValue.replace(/(jquery)/g, '<my_found>$1</my_found>');
$(this).replaceWith(str);
});
alert($('body').html());
});
</script>
</head>
<body>
<div onclick="alert(1)">jquery text1</div>
jquery
<span onclick="alert(2)">
text2
<span onclick="alert(3)">
text3 jquery
<button>jquery text</button>
</span>
</span>
</body>
|
Кстати еще jQuery не умеет делать операции с большими числами..
А так же не умеет складывать числа и умножать их... Как например мне получить половину от количества букв во втором по алфавиту атрибуте пятого элемента в наборе?? может ли такое jQuery ??? вот и я про то!! tenshi, хватит херню пороть я те сказал что jQuery нужна для работы с DOM и она умеет ВСЕ для работы с DOM и даже больше. п.с. $('ololo').width() тоже возвращает не jQuery обьект, а число, это является прямым доказательством что jQuery не может работать с числами!! и дать нам например половину от ширины.. Нам придется это делать РУКАМИ, ЗА пределами jQuery!!!!1 а вдруг число дробное и нам нужны точные вычисления? jQuery так не умеет. Я думаю jQuery говно. |
Цитата:
|
Прости я не понял о че то о каком оборачивнии? тред особо не читал)
|
> $.find("body").attributes;
ну охуеть теперь) с NamedNodeMap так приятно работать.. > Array.prototype.forEach.call( attributes,.. $( attributes ).each( ... но факт остаётся фактом - через jq нельзя получить список аттрибутов элемента. можно лишь получить сам элемент и через его апи получить этот список, а потом завернуть список обратно в jq. > поподробней а что тут не понятно? > так, чтобы не посбивались обработчики (addEventListener, не делегированные) и ссылки на существующие элементы, которые существуют наравне с обычным текстом. разумеется, и чтобы состояние контролов и позиция каретки чтобы не менялась) > он и так слишком толстый, все предусмотреть не возможно есть такая вещь как модульность, про которую разработчики jq видимо не слышали |
bes, всё хорошо, вот только не все вхождения находит
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style>
my_found {
background: yellow;
}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
jQuery(function ($) {
$('button').click(function(){
alert($('body').html())
return false
})
$('body').find(':contains("jquery")').contents()
.filter(function () {
return this.nodeType == 3;
})
.add ($('body').contents()
.filter(function () {
return this.nodeType == 3 && this.nodeValue.indexOf('jquery') != -1
})
).each(function () {
var str = this.nodeValue.replace(/(jquery)/g, '<my_found>$1</my_found>');
$(this).replaceWith(str);
});
});
</script>
</head>
<body>
<div>jquery text1</div>
<b>j</b>Query
<a href="jquery.com">
text2
<span>
text3 jquery
<button>jquery text</button>
</span>
</a>
</body>
|
Цитата:
и здесь href="jquery.com" тоже должен найти? |
первый очевидно да, второй очевидно нет
|
Цитата:
но об этом мы уже говорили страницу - две назад ) |
TextNode тут не особо поможет. нужно использовать TextRange
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 07:22. |