2009-07-01 3 views
1

Я создал функцию javascript, которая займет скрытый диапазон, скопируйте текст в пределах этого промежутка и вставьте его в один тег textarea на веб-сайте. Я написал функцию в JavaScript, которая делает это (ну, вроде, только через несколько кликов), но я знаю, что есть лучший способ - любые мысли? Поведение похоже на Retweet для twitter, но вместо этого использует разделы сообщения в блоге. О, и я также звоню в jquery в заголовке.JQuery Скопируйте текст и вставьте в textarea

<script type="text/javascript"> 
function repost_submit(postID) {  
    $("#repost-" + postID).click(function(){ 
     $("#cat_post_box").empty(); 
     var str = $("span#repost_msg-" + postID).text(); 
     $("#cat_post_box").text(str); 
    }); 
} 
</script> 
+0

О, также, postID передается через onclick в теге Schoffelman

ответ

1
$("#repost-" + postID).click(function(){ 
    $("#cat_post_box").val(''); // Instead of empty() - because empty remove all children from a element. 
    $("#cat_post_box").text($("#repost_msg-" + postID).text());//span isn't required because you have and id. so the selector is as efficient as it can be. 
}); 

И обернуть все в $ (документ) .ready (функция() {/ Вставьте код здесь /}), так что он будет связываться с $ ("# repost-" + сообщения дан) Кнопка или ссылку при загрузке DOM.

2

Основываясь на комментарий в вашем вопросе, я предполагаю, что у вас есть что-то подобное в вашем HTML:

<a href="#" onclick="repost_submit(5);">copy post</a> 

И я также предполагаю, что, поскольку вы передаете идентификатор поста может быть более одного на страницу.

Часть красоты jQuery заключается в том, что вы можете делать действительно классные вещи наборы элементов без использования встроенных событий Javascript. В настоящее время они считаются плохой практикой, так как лучше всего отделить Javascript от вашего кода презентации.

Правильный путь, то должен был бы сделать что-то вроде этого:

<a href="#" id='copy-5' class='copy_link'>copy post</a> 

И тогда вы можете иметь много других, которые выглядят одинаково:

<a href="#" id='copy-5' class='copy_link'>copy post</a> 
<a href="#" id='copy-6' class='copy_link'>copy post</a> 
<a href="#" id='copy-7' class='copy_link'>copy post</a> 

Наконец, вы можете написать код jQuery, чтобы сделать что-то вроде этого:

$(function() { // wait for the DOM to be ready 
    $('a.copy_link').click(function() { // whenever a copy link is clicked... 
     var id = this.id.split('-').pop(); // get the id of the post 
     var str = $('#repost_msg-' + id); // span not required, since it is an ID lookup 
     $('#cat_post_box').val(str); // empty not required, and val() is the proper way to change the value of an input element (even textareas) 
     return false; 
    }); 
}); 

Это лучший способ сделать это, даже если есть только одно сообщение в страница. Часть проблемы с вашим кодом заключается в том, что при первом нажатии она BINDS выполняет функцию, а в последующих кликах - когда она наконец вызывается. Вы можете пойти на быстрое и грязное исправление, изменив это, чтобы просто быть в документе.

0

У меня возникла проблема с примером Паоло, когда я нажал на ссылку, текст, появившийся в #cat_post_box, был «object Object». Как только я добавил «.text()» в конце этого заявления, я работал.

var str = $('#repost_msg-' + id).text(); 

Спасибо, например, Паоло!

Смежные вопросы